c - 将值分配给动态分配的二维指针数组时出现语法错误

标签 c arrays pointers multidimensional-array dynamic-memory-allocation

我想直接给动态分配内存的二维指针数组赋值。但是编译器显示 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 的指针数组,其他的(pmat2pmat3 ) 只是 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/

相关文章:

c - comp.lang.c 常见问题解答中有错误?计算可变格式字符串的长度

ruby-on-rails - 在 Ruby 中对数组进行排序(特例)

java - 将文件列出到字符串数组并从 FTP 服务器列出文件

c++ - 使用类的 vector

c++ - 为指针赋值时出现段错误 C++

c - 内核模块中的调试堆栈溢出

c - sigaction 用法和解释

c - Strtok 使用动态内存

c# - 将多维数组数据从 C# webservice 返回到 vba

opencv - 为什么 Mat 类型不需要是指针?