对于指向int数组的指针,Malloc()空间的正确方法

Ank*_*ush 1 c arrays pointers heap-memory

假设我有一个指向数组的指针int,如下:int (*x)[3].为这样的变量分配空间的正确方法是什么?例如,假设我想要10个项目的空间(这样我可以10 * 3 = 30在x中存储总值):

/* Is this the correct way? */
x = malloc(sizeof(x) * 10);

/* Will it allow me to do this? */
x[0][0] = 10;
x[0][1] = 20;
x[0][2] = 30;

x[1][0] = 40;
x[1][1] = 50;
x[1][2] = 60;

/* ... etc ... */
Run Code Online (Sandbox Code Playgroud)

或者是否有其他方法可以正确地对内存进行malloc x(即x = malloc(sizeof(int) * 10)x = malloc(sizeof(int *) * 10)

谢谢.

小智 7

首先,您不希望为指针分配空间,而是为它指向的对象分配空间.这是一个重要的区别.

所以你有一个指针类型指向二维数组,第二个维度为3(让我们调用这些),你希望数组有10 .在C中,n维数组是连续存储的,这意味着它们与所有元素一起占用的空间非常大.所以公式变得非常简单:

x = malloc(3 * 10 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

编辑:如果你想避免幻数,你也可以使用typedef:

typedef int inttriplet[3];
// [...]
inttriplet *x;
x = malloc(10 * sizeof(inttriplet));
Run Code Online (Sandbox Code Playgroud)