带malloc的二维数组
我试图使用calloc和malloc来创建一个二维数组。到目前为止,我的逻辑是首先使用calloc创建一个整数指针数组,然后使用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");
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有很多人!!我的那个愚蠢的错误没有得到任何警告或任何东西。非常感谢:谢谢大家!!我的那个愚蠢的错误没有得到任何警告或任何东西。谢谢: