关于C语言中数组名作为参数传递的问题。

在turbo C中,有如下代码:在main函数中测试数组名sizeof(x)为160字节,
而在子函数中得到的结果是2,请大家解释一下原因。

void sizeofmat(int *);
main()
{
int i,j;
unsigned short x[8][10]={{1,2,3,4,5,6,7,8,9,0},
{2,3,4,5,6,7,8,9,0,1},
{3,4,5,6,7,8,9,0,1,2},
{4,5,6,7,8,9,0,1,2,3},
{5,6,7,8,9,0,1,2,3,4},
{6,7,8,9,0,1,2,3,4,5},
{7,8,9,0,1,2,3,4,5,6},
{8,9,0,1,2,3,4,5,6,7}};
i=sizeof(x);
printf("sizeof(x) is %d\n",i);

sizeofmat(x);
getch();
}

void sizeofmat(int *x)
{
printf("sizeof *x is %d\n",sizeof(x));
}

数组名作为参数就退化为指针.
所以在你的sizeofmat中,sizeof(x)就值就是sizeof一个指针的值.

因为指针就是地址,数组名也是地址.
所以你数组名作为参数的时候,是不会传递整个数组的,而是传递了一个地址,就是指针.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-08
sizeofmat的参数错误;必须是数组类型;sizof(x)才能将其视为数组来检测
相似回答