带malloc的二维数组

带malloc的二维数组,c,C,我试图使用calloc和malloc来创建一个二维数组。到目前为止,我的逻辑是首先使用calloc创建一个整数指针数组,然后使用malloc创建第二个维度。这是我的代码: enter code here #include<stdio.h> #include<stdlib.h> int main() { int N,M,i=0,j=0; printf("Give the dimensions");

我试图使用calloc和malloc来创建一个二维数组。到目前为止,我的逻辑是首先使用calloc创建一个整数指针数组,然后使用malloc创建第二个维度。这是我的代码:

enter code here


    #include<stdio.h>
    #include<stdlib.h>

    int main()
    {
        int N,M,i=0,j=0;

        printf("Give the dimensions");
        scanf("%d%d",&N,&M);
        printf("You gave N: %d and M: %d\n",N,M);

        int **a=(int**)calloc(N,sizeof(int*));

        for(i=0; i<N; i++)
        {
            a[i]=(int*)malloc(M*sizeof(int));
        }

        printf("The array that was created resigns on addresses\n");
        for(i=0; i<N; i++)
        {
            for(j=0; j<M; j++)
            {
                printf("addr: %p\n",a[i,j]);
            }
        }
    }

有了这个,我想确保我创建了我想要的数组。以N=2和M=2为例,我以地址为例:0,0:0x00001,0,1:0x00003,1,0:0x00001,1,1:0x00003。因此,我没有得到二维数组,只是一个只有两个位置的简单数组。你能指出我的编码错误吗?我找不到它…:S

索引访问运算符[]的错误用法。您没有访问第i行和j列,而是只访问j元素,因为您使用逗号运算符:

a[i,j] == a[j]
相反,您必须访问给定的行,然后访问单元格:

a[i][j]
请注意,这将不会返回地址,而是返回int:


如果您仍然想知道条目的地址,则必须使用&a[i][j]或a[i]+j.

索引访问操作符[]的错误用法。您没有访问第i行和j列,而是只访问j元素,因为您使用逗号运算符:

a[i,j] == a[j]
相反,您必须访问给定的行,然后访问单元格:

a[i][j]
请注意,这将不会返回地址,而是返回int:

如果您仍然想知道您的条目地址,您必须使用&a[i][j]或a[i]+j

就是

printf("addr: %p\n",a[j]);
这里使用的是逗号运算符

要访问第i个数组的第j个元素,可以使用

a[i][j]
但这里是一个int,而不是指针,因此printf将通过%p转换调用未定义的行为

就是

printf("addr: %p\n",a[j]);
这里使用的是逗号运算符

要访问第i个数组的第j个元素,可以使用

a[i][j]

但是这里是一个int,而不是指针,因此printf将通过%p转换调用未定义的行为。

您应该检查返回值是否正确,即使您确信您的系统将成功返回。另外,s/resigns/resides/您应该检查返回值是否正确,即使您确信您的系统将成功返回。还有s/辞职/居住/谢谢你的回答。我只是照你说的做了。forj=0;谢谢你的回答。我只是照你说的做了。forj=0;jThx有很多人!!我的那个愚蠢的错误没有得到任何警告或任何东西。非常感谢:谢谢大家!!我的那个愚蠢的错误没有得到任何警告或任何东西。谢谢: