<分区>
我是 C 的新手。我很难理解以下两者之间的区别
int N = 16
double (*XX)[2] = malloc(2*N*sizeof(double));
和
int N = 16
double *XX[2] = malloc(2*N*sizeof(double));
如果我写第一个,它就会被编译。但是,第二个给出以下错误。请解释
error: invalid initializer
编辑:我还想问一下 malloc 在上述正确情况下做了什么?
<分区>
我是 C 的新手。我很难理解以下两者之间的区别
int N = 16
double (*XX)[2] = malloc(2*N*sizeof(double));
和
int N = 16
double *XX[2] = malloc(2*N*sizeof(double));
如果我写第一个,它就会被编译。但是,第二个给出以下错误。请解释
error: invalid initializer
编辑:我还想问一下 malloc 在上述正确情况下做了什么?
最佳答案
double (*XX)[2]
是指向包含两个 double
元素的数组的指针。
double *XX[2]
是指向包含两个 double *
元素的数组的指针。
malloc
用于动态内存分配,例如:
char array_stack[2]; // 2 chars allocated on the stack (no need for free())
char *array_heap = malloc(2 * sizeof(char)); // 2 chars allocated on the heap
// later...
free(array_heap); // heap memory must be freed by user
仅供引用:
char array_stack[2]; // this is nevertheless a pointer
char *array = array_stack; // this works, because array_stack is a pointer to a char
有关堆栈和堆的更多信息:Stack vs Heap
double *XX[2] = malloc(2*N*sizeof(double));
不起作用,因为它需要两个元素作为初始值设定项。例如:
double _1, _2;
double *XX[2] = {&_1, &_2};
如果你想用 malloc 做到这一点,你需要将它更改为指向具有双指针的数组的指针,如下所示:
double **XX = malloc(...);
关于c - 理解指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038473/