我想直接给一个指针的2d数组赋值,内存是动态分配的。但是编译器显示2个警告和1个错误。
第11行和第12行的2个警告:int的间接寻址级别与
内景*。
第13行出错:语法错误:'{'
这是我的代码:

#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的指针数组,其他的(pmat2pmat3)只是int的数组(即不是指针)。
第二个问题是初始化,不能这样赋值,必须分别初始化每个字段。
第三,*pmat1[3]并不像您期望的那样,而且它超出了界限,因为数组索引从零开始。
如果我们要降到一个更基本的层次,如果你想要的是一个由三个整数组成的三个数组,那么你做的是完全错误的,那么

int pmat1[3][3];

上述操作将导致编译器为总共9个(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;

10-08 08:23