一、数组作参数后的长度
数组作参数时,其后面的长度毫无意义,应该改成不定义长度的数组。作为参数时,数组将自己降级为指针。下面例子中,sizeof(arr)取到的是arr地址的长度,等于4。而主程序中sizeof(num)应该是12。
#include <stdio.h>
int subFunc(int arr[3]);
int main(void)
{
int x, len;
num[] ={10, 20, 30};
//取数组的长度
len = sizeof(num) / sizeof(int);
printf("main中的数组长度:%dn\n", len);
//让数组的每一个元素加1
for (i=0; i<len; i++) {
printf("%3d", ++num[i]); //++num[i]是先加后显示
}
subFunc(num); //调用子函数
//再次显示数组内容
printf("\nmain中的数组:\n");
for(i=0; i<len; i++) {
printf("%3d", num[i]); //只有num[0]发生了改变
}
printf("\n");
return 0;
}
int subFunc(int arr[3]) //将数组改成指针,结果一样 int subFunc(int *arr)
{ //若用数组也应该不定义长度 int subFunc(int arr[])
int i, len ;
//取数组的长度
len = sizeof(arr) / sizeof(int);
printf("subFunc中的数组长度:%d\n",len);
//让数组的每一个元素加1
for(i=0; i<len; i++) { //其实并没有循环3次
printf("%3d", ++arr[i]); //只循环了1次
} //如果将len改成3,便可以达到预期效果
printf("\n");
return ;
}
|