2017-01-11 23 views
0

我已打印出來我sizeof(array)/sizeof(*array)和接收數3,但是當我通過我的陣列到我的功能時,爲此迭代一個更短的時間比它應該存儲到變量中,並打印出2。爲什麼我的迭代次數少於預期?

void printAry(int ary[]) 
{ 
    int size = sizeof(ary)/sizeof(ary[0]); 
     cout<<size;//size will print out 2! why? 
     for(int i = 0; i < size;i++) 
    { 
     cout<<ary[i]; 
    } 
} 

int main() { 
    int ary[3] = {1,2,3}; 
    cout<<sizeof(ary[0]); 

    return 0; 
} 

爲什麼它的迭代次數少於預期?

+2

陣列被解釋爲函數內的_pointer_,因此問題。更糟糕的是,你將_a的單個成員__傳遞給函數,而不是整個數組。 – ForceBru

+0

'ary'是'printAry'中的指針,而不是'int的數組'。 – BLUEPIXY

回答

4

其原因是陣列衰變成指針

基本上

void printAry(int ary[]) 

等同於:

void printAry(int* ary) 

所以sizeof(ary)等於指針的大小,以int您的系統上。

+0

如果你不介意的話:我已經添加了「指針'int'」因爲不是所有的指針* *不一定需要是相同的大小。 – Bathsheba

+0

@Bathsheba是的,例如指向函數假設可能有另一個大小。好點子! –

+0

原語也是如此,例如'sizeof(int *)'可能與'sizeof(long *)'不同。 – Bathsheba

4

您不能使用sizeof(ary)/sizeof(ary[0])成語如果ary是一個函數的參數,因爲它已經腐朽爲指針類型:sizeof(ary)只是一個指針int你的平臺上的大小。

在C中,需要明確地傳送的大小的信息,或採用的特定值信號的陣列的端部的約定(參見'\0'在C標準庫字符串函數。)

在C++中,您可以使用std::vector

相關問題