这可能是我是菜鸟,但是....
我正在尝试使用动态分配的2D数组。我遵循了here所示的方法,在该方法中,他们使用大小为“行x列”的单个维度数组来解决。
当我做一些测试时,我用数字2填充数组的所有位置,然后我一直在访问单个位置并将其更改为9只是为了查看A(1),A(2 ),A(3)等相对于一维。
一切都按预期进行,直到我尝试修改A [5]为止,当我这样做时,数组的两个位置将被覆盖,而不是仅仅覆盖5个。关于发生了什么的任何想法?
顺便说一句,通过“ A [5]和A [4]”与“ *(A + 5)和*(A + 4)”对数组的位置进行寻址可以得到相同的结果。
感谢您的帮助! :)
此:
int main()
{
int dim1, dim2, row, column, i=0;
scanf("%d",&dim1);
scanf("%d",&dim2);
printf("dim1=%d dim2=%d\n", dim1, dim2);
int *A;
A=(int* )malloc(dim1*dim2*sizeof(int));
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
A[(row*dim1)+column]=2;
i++;
}
}
printf("Before assignment\n");
*(A+5)=9;//<<<<<<<-THIS IS WHERE I AM ACCESSING THE ARRAY
printf("after assignment\n");
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
printf("%d ", A[(row*dim1)+column]);
}
printf("\n");
}
结果是: Accessing A[5]
但是这个:
int main()
{
int dim1, dim2, row, column, i=0;
scanf("%d",&dim1);
scanf("%d",&dim2);
printf("dim1=%d dim2=%d\n", dim1, dim2);
int *A;
A=(int* )malloc(dim1*dim2*sizeof(int));
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
A[(row*dim1)+column]=2;
i++;
}
}
printf("Before assignment\n");
*(A+4)=9;//<<<<<<<-THIS IS WHERE I AM ACCESSING THE ARRAY
printf("after assignment\n");
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
printf("%d ", A[(row*dim1)+column]);
}
printf("\n");
}
结果是: Accessing A[4]
答案 0 :(得分:2)
这是错误的地址。
A[(row*dim1)+column]=2;
^^^^
此dim1
应该是dim2
。
A[(row*dim2)+column]=2;
回想一下,dim1
是行数,dim2
是列数。将它们命名为nrows
和ncols
或其他描述性名称可能会有所帮助。
A[(row*ncols)+column]=2;