我想直接给动态分配内存的二维指针数组赋值。但是编译器显示 2 个警告和 1 个错误。
2 Warnings on line 11 and 12: int differs in level of indirection from int*.
error on line 13: Syntax error : '{'
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int r , c, rc;
int* pmat1[3][3], pmat2[3][3], pmat3[3][3];
*pmat1[3] = (int*)calloc(3,sizeof(int));
*pmat2[3] = (int*)calloc(3,sizeof(int));
*pmat3[3] = (int*)calloc(3,sizeof(int));
*pmat1[3][3] = { {1,1,1}, {0,0,0}, {2,2,2} };
return 0;
}
我在这里犯了什么错误?
最佳答案
你的代码有很多问题。第一个是只有 pmat1
是指向 int
的指针数组,其他的(pmat2
和 pmat3
) 只是 int
数组的数组(即不是指针)。
第二个问题是初始化,你不能那样赋值,你必须分别初始化每个字段。
第三,*pmat1[3]
没有做您可能期望它做的事情,此外它越界,因为数组索引从零开始。
如果我们要深入到更基本的层面,如果你想要的是一个由三个整数组成的三个数组的数组,那么你做的就完全错了,那么它就足够了
int pmat1[3][3];
以上将导致编译器分配总共九 (3 * 3) 个 int
的空间。无需任何动态分配。
然后你可以像这样初始化它
pmat1[0][0] = pmat1[0][1] = pmat1[0][2] = 1;
pmat1[1][0] = pmat1[1][1] = pmat1[1][2] = 0;
pmat1[2][0] = pmat1[2][1] = pmat1[2][2] = 2;
关于c - 将值分配给动态分配的二维指针数组时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32735689/