今天在一本书上看到这样一个子函数:
void fun(char a[10])
{
int i = sizeof(a);
char c = a[3];
}
问定义一个实参b[10],如果数组b真正传递到函数内部,那 i 的值应该为10.。但经测试 i 值为4!说明一条规则:
C语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元素首地址的指针。
从这个子函数上我又想到一个问题,修改上述子函数如下:
void fun(char a[10])
{
char b[10] = {0};
int i = sizeof(a);
int j = sizeof(b);
}
按照那条规则,i 和 j 的值应该不一样,i 为4,j 为10。
然后我写了一个小程序测试了下,结果果然如上述分析:i 为4, j为10。
文章评论(0条评论)
登录后参与讨论