首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求二维数组作函数形参

2013-04-20 
求二维数组做函数形参有如下代码:#define GET_ARRAY_LEN(array,len,colcounter) {len (sizeof(array) /

求二维数组做函数形参
有如下代码:
#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      
谢谢,请问有什么方法可以解决这个问题吗
一般常用的方式是在函数形参加上表示数组长度的信息,比如再定义一个变量传递长度信息,退化问题是龟腚

热点排行