【发布时间】:2015-08-29 06:41:46
【问题描述】:
我知道二维数组作为一维数组存储在内存中。 因此,按照相同的逻辑,我尝试使用单个指针通过引用传递数组,就像对一维数组所做的那样。 以下是我的代码:
#include<stdio.h>
void display(int *s)
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",s[i][j]);
}
printf("\n");
}
}
int main()
{
int s[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf("address of the array is %p\n",s);
printf("value is %p\n",*s);
int i;
printf("address of the repective array is\n");
for(i=0;i<3;i++)
{
printf("address of the array is %p\n",s[i]);
}
display(s);
return 0;
}
当我尝试编译这个得到以下消息:
twodarray.c: In function ‘main’:
twodarray.c:25:2: warning: passing argument 1 of ‘display’ from incompatible pointer type [enabled by default]
display(s);
^
twodarray.c:2:6: note: expected ‘int **’ but argument is of type ‘int (*)[4]’
void display(int *s[3])
^
当我运行上面的代码时,我得到分段错误错误。
【问题讨论】:
-
看起来您已经初始化了一个二维数组,但试图将它作为一维数组传递给函数。不过我可能是错的
-
是的,它是一个二维数组,但是二维数组和内存中的一维数组不一样吗?
-
void display(int *s)改成void display(int s[3][4])如果你想printf("%d ",s[i][j]); -
或
void display(int s[][4])或void display(int (*s)[4]) -
@ user2738777 ,二维数组的名称被转换为指向第一个数组的指针,而不是指向
int的指针或指向int的指针。谷歌“将二维数组传递给函数”或尝试我或@BLUEPIXY 建议的更改