以下C程序:
int doStuff(int afm[]);
int main(){
int afm1[9] = {1,2,3,4,5,6,7,8,9}; //size=9
int afmLength = sizeof(afm1)/sizeof(int);
printf("main: Length Of Array=%d\n", afmLength); //9 OK
int k = doStuff(afm1);
system("PAUSE");
return 0;
}
int doStuff(int afm[]){
int afmLength = sizeof(afm)/sizeof(int);
printf("doStuff: Length Of Array=%d\n", afmLength); //1 WRONG
return 1;
}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
main: Length Of Array=9
doStuff: Length Of Array=1
Run Code Online (Sandbox Code Playgroud)
为什么在main中正确计算数组大小,但在函数内部是错误的?
因为在main你有一个数组并且在函数中你有一个指向该数组的指针.
int doStuff(int afm[])
Run Code Online (Sandbox Code Playgroud)
相当于
int doStuff(int *afm)
Run Code Online (Sandbox Code Playgroud)