Tôi biết rằng các kỹ thuật phổ biến của việc tạo ra một mảng động sử dụng new
trong C++ như sau:C++ tạo một tĩnh như mảng với "mới" hay một cách khác để tạo ra một mảng động
int * arr = new int[5];
Một cuốn sách cũng nói:
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
Bây giờ tôi tự hỏi, nếu có một cách để phân bổ bộ nhớ cho một mảng sử dụng new
, vì vậy nó có thể được sau đó được gán cho một con trỏ đến toàn bộ mảng. Nó có thể trông giống như thế này:
int (*p)[5] = new int[5];
Ví dụ trên không hiệu quả. Phía bên trái có vẻ đúng với tôi. Nhưng tôi không biết những gì nên ở bên phải.
Ý định của tôi là hiểu nếu có thể. Và tôi biết rằng có std::vector
và std::array
.
UPD
Dưới đây là những gì tôi thực sự muốn kiểm tra:
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;
Và đây là làm thế nào để truy cập vào các mảng:
memset(*p1, 0, sizeof(*p1));
cout << "p1[0] = " << (*p1)[0] << endl;
memset(p2, 0, sizeof(*p2) * 5);
cout << "p2[0] = " << p2[0] << endl;
Vì vậy, điều đó có nghĩa là không thể cấp phát bộ nhớ cho cấu trúc này 'int (* p) [5] ='. Đúng? –
bạn có thể ép mạnh nó bằng c-cast '(int (*) [5]) int mới [5]', nhưng xin vui lòng, đừng làm điều đó trong mã thực. –
Tôi chỉ chơi xung quanh nó và cố gắng để có được sự hiểu biết. BTW, tại sao bạn nói không làm điều đó trong mã thực? –