ben C++ new
kullanarak dinamik dizi oluşturma yaygın bir teknik olduğunu biliyoruz: C++ "yeni" veya dinamik bir dizi yaratmanın başka yolu ile dizideki gibi bir statik oluşturmadan
int * arr = new int[5];
Bir kitap da diyor
:short tell[10]; // tell an array of 20 bytes
cout << tell << endl; // displays &tell[0]
cout << &tell << endl; // displays address of the whole array
short (*p)[10] = &tell; // p points to an array of 20 shorts
new
kullanarak bir dizi için bellek ayrılamadı bir yol olup olmadığını Şimdi merak, bu yüzden daha sonra tüm dizi için bir işaretçi atanabilir. O şöyle olabilir:
int (*p)[5] = new int[5];
Yukarıdaki örnek çalışmaz. Sol taraf bana doğru görünüyor. Ama sağda ne olması gerektiğini bilmiyorum.
Amacım mümkün olup olmadığını anlamaktır. Ve biliyorum ki std::vector
ve std::array
.
UPD İşte
Aslında kontrol etmek istediğim şey:
int (*p1)[5] = (int (*)[5]) new int[5];
// size of the whole array
cout << "sizeof(*p1) = " << sizeof(*p1) << endl;
int * p2 = new int[5];
// size of the first element
cout << "sizeof(*p2) = " << sizeof(*p2) << endl;
Ve burada bu diziler erişmek için yapılması gerekenler:
memset(*p1, 0, sizeof(*p1));
cout << "p1[0] = " << (*p1)[0] << endl;
memset(p2, 0, sizeof(*p2) * 5);
cout << "p2[0] = " << p2[0] << endl;
Yani, bu yapı 'int (* p) [5] =' için bellek ayırmanın mümkün olmadığı anlamına gelir. Sağ? –
zorla c-cast '(int (*) [5]) new int [5]' ile yapabilirsin, ama lütfen gerçek kodda yapmayın. –
Sadece etrafta dolaşıyorum ve kepçe anlayışını almaya çalışıyorum. BTW, neden gerçek kodda yapmamayı söylüyorsun? –