读书人

求二维数组作函数形参

发布时间: 2013-04-20 19:43:01 作者: rapoo

求二维数组做函数形参
有如下代码:
#define GET_ARRAY_LEN(array,len,colcounter) {len = (sizeof(array) / sizeof(array[0][0])/colcounter);}

int a[][3]={
{1,2,3},
{4,5,6}
};

voidlength(int b[][3])
{
int b_len;
printf("*******b[0][2]=%d\n",b[0][2]);
printf("sizeof(b)=%d\n",sizeof(b));
GET_ARRAY_LEN(b,b_len,3);
printf("******b_len=%d\n",b_len);
}

int main(int argc, char *argv[])
{
printf("sizeof(a)=%d\n",sizeof(a));

int a_len=0;
GET_ARRAY_LEN(a,hz_len,3);
printf("hz_len=%d\n",hz_len);

length(a);

system("PAUSE");
return 0;
}
结果发现b_len=0 ,这让我不可思议,但打印b[0][2]时,值确实为3 。求大神来指点指点我?
[解决办法]

引用:
引用:
你对sizeof(b)=4 没有提出疑问吗?在函数中形参数组名b已经退化为指针了,所以sizeof(b)=4了,那么b_len=0就没有什么好惊奇的了,sizeof(b)/sizeof(b[0][0])/3=4/4/3=1/3=0
谢谢,请问有什么方法可以解决这个问题吗
一般常用的方式是在函数形参加上表示数组长度的信息,比如再定义一个变量传递长度信息,退化问题是龟腚

读书人网 >C语言

热点推荐