2013-04-26 38 views
-2

我的陣列,我進入我的構造函數只允許我的三分球創造只大小的數組4嘗試我的數組的指針,但它不工作

int* Array1; 
int* Array2; 
Sort::Sort(int acrray[]){ 
    Array1 = new int[size(acrray)](); 
    cout << sizeof(*Array1); 
    Array2 = new int[size(acrray)](); 
    for(int index = 0; index < sizeof(acrray);index++){ 
     Array1[index] = acrray[index]; 
     cout << index << endl; 
     Array2[index] = acrray[index]; 
    } 
} 

這是測試用例:

int arrays[] = {5,7,3,5,1,24,5}; 
Sort n(arrays); 

這裏是我的輸出: Code Output

+1

這似乎是C++代碼,但我不是一個C++開發。我的觀點是你應該正確地標記問題。 – KyleM 2013-04-26 03:22:33

+0

你想在這裏完成什麼?你想獲得數組中存儲的元素的數量嗎? – Owen 2013-04-26 03:31:16

回答

2

sizeof(*Array)實際上是sizeof(int)

void foo(int acrray[]) { 
    cout << sizeof(acrray); 
} 

將始終打印4(或64位機器上的8)。這不是函數參數中的數組,儘管它的外觀,而是一個指針。你應該添加一個參數爲數組的大小:

void foo(int acrray[], size_t len) ... 

之外,sizeof(array)不會給你數組的長度,但它的大小在內存佔用。

1

如果你有一個數組,那麼只有當你在同一個方法創建它,你可以寫

sizeof(array)/sizeof(array[0])

得到數組中元素的個數。但是,只有當你使用相同的方法創建它時,它纔會起作用,這是毫無意義的 - 一旦你將你的數組傳遞給程序中的任何其他地方,它就會像指針類型一樣處理,然後sizeof(array)將等於sizeof(*int)或者你的數組的元素類型是什麼)。所以,如果你傳遞一個數組,你需要將它的長度作爲一個單獨的參數傳遞給它。

爲了證明陣列的衰變到指針,下面的C代碼:

int sizeofarray(int array[]) 
{ 
    return sizeof(array)/sizeof(array[0]); 
} 

int main() 
{ 
    int myarray[] = {1, 2, 3}; 
    printf("%d\n", sizeof(myarray)/sizeof(myarray[0])); 
    printf("%d\n", sizeofarray(myarray)); 
    return 0; 
} 

產生這樣的輸出:

3 
1 
+0

不,它不會。 'sizeof(acraray)'是'sizeof(int *)',請參閱其他答案。 – 2013-04-26 04:38:49

+0

@ H2CO3固定,ty – Patashu 2013-04-26 04:47:58

+0

我看,謝謝。 [15] – 2013-04-26 04:51:26

相關問題