2015-04-04 78 views
-1
int main() 
{ 
int laiArreglo[] = {5,8,2,3,1,4,6,9,2,10}, liElemento; 

printf("\nInsert the number: "); 
      scanf("%d", &liElemento); 
      ShowNumber(laiArreglo); 
return 0; 
} 




void ShowNumber(int laiArreglo[]) 
{ 
    int liContador; 

    printf("\nNumbers: "); 

    for (liContador = 0; liContador < sizeof (laiArreglo)/sizeof (int); liContador++) 
    { 
     printf("%d ", laiArreglo[liContador]); 
    } 
} 

我在主要使用(的sizeof(laiArreglo)/的sizeof(int)的),它裏面的工作完美,但是,現在它的功能不起作用,爲什麼?「的sizeof」知道數組的大小函數在C不工作

+2

因爲它是一個指針而不是數組。 – BLUEPIXY 2015-04-04 14:04:46

+1

'ShowNumber'的參數是一個'int *'。你必須傳遞一個額外的參數來表示數組的大小來修復它。 – 2015-04-04 14:05:13

回答

1

請記住,數組"decays"的一個指針,以它的第一個元素。當你使用

sizeof(laiArreglo) 

main這個名字,它的計算結果

10*sizeof(int) 

,而不是

sizeof(int*) 

,因爲它是one of the cases where decay dosen't happen

當您使用

ShowNumber(laiArreglo); 

將它傳遞給一個函數,確實發生衰變。所以上面的語句相當於

ShowNumber(&laiArreglo[0]); 

,當你使用

sizeof(laiArreglo) 

從功能ShowNumber,它的計算結果

sizeof(int*) 

laiArreglo是一個指向int指向陣列的第一個元素的地址laiArreglo

1

在你的函數ShowNumber(),你過去是一個指針,而不是一個陣列

相關問題