计算函数内的数组大小

ath*_*spk 0 c arrays

以下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中正确计算数组大小,但在函数内部是错误的?

Dav*_*nan 7

因为在main你有一个数组并且在函数中你有一个指向该数组的指针.

int doStuff(int afm[])
Run Code Online (Sandbox Code Playgroud)

相当于

int doStuff(int *afm)
Run Code Online (Sandbox Code Playgroud)