2013-07-30 67 views
2

我試圖發送到被調用函數的數組未正確發送。假設我在數組'a'中插入了五個元素,並使用函數insert函數傳遞數組,並使用以下代碼的最後兩行檢查數組的大小,它顯示比數組的實際大小小1的數組。這是爲什麼發生?數組未正確通過

void main() 
{ 
    //rest of the code  
    insert(a,key); //user-defined function 
} 

void insert(int a[],int key) 
{ 
    int *p=a; 
    int n = sizeof(a); 
    printf("No. of elements entered:%d\n",n); 
} 

回答

5

sizeof(a)只是給你一個指針的字節大小(4你的機器上,顯然)。一旦數組被傳遞給函數,就無法確定數組的大小,因爲當作爲函數參數傳遞時,數組會衰減爲指針。您應該將該數組的大小作爲單獨的參數傳遞,例如

void insert(int a[], int n, int key) 
{ 
    printf("No. of elements entered: %d\n", n); 
} 

int main() 
{ 
    int a[5]; 

    insert(a, 5, key); 
}