2014-10-30 56 views
0

我已經成功地反轉了一維數組,但是當我查找內容時,它會打印出內容,然後打印其他數字。在C++中反轉數組

4 
3 
2 
1 
-858993460 
-858993460 
4 
-858993460 
-1021245226 
12384668 
3697177 
1 
14484784 
14501672 
-1021245434 
0 
Press any key to continue . . . 

我不知道爲什麼它打印出這些額外的數字。以下是我的源代碼:

#include <iostream> 
#include <array> 

using namespace std; 

void flipRow(int array[], int row) { 
    int temp; 
    for (int i = 0; i < sizeof(array)/2; i++) { 
     //cout << "Hi" << endl; 
     temp = array[i]; 
     array[i] = array[row-1]; 
     array[row-1] = temp; 
     row--; 
    } 
} 

int main() { 

    const int ROW = 4; 

    int array[ROW] = { 1, 2, 3, 4 }; 
    flipRow(array, ROW); 

    for (int i = 0; i < sizeof(array); i++) { 
     cout << array[i] << endl; 
    } 

    system("pause"); 
    return 0; 
} 

這些地址?有人可以告訴他們爲什麼打印出來嗎?謝謝。

+4

'sizeof(array)'不會做你認爲它做的事。 – drescherjm 2014-10-30 22:30:58

+2

看看這個答案http://stackoverflow.com/questions/37538/how-do-i-determine-the-size-of-my-array-in-c – Hagai 2014-10-30 22:54:39

+2

如果它是在所有的選項,我會消化這個源代碼,並使用'main()'中的[**'std :: reverse' **](http://en.cppreference.com/w/cpp/algorithm/reverse)。 – WhozCraig 2014-10-30 23:32:02

回答

1

修改您for迴路main所以它的條件部分變成i < ROW和修改for迴路flipRow這樣的條件部分就有記載i < row/2sizeof運算符以字節返回您的數組的大小。你的數組中有四個元素,它們的類型是整型,在你的平臺上是4字節,所以你對sizeof的調用返回16.

+0

偉大的工作。謝謝。 – JOH 2014-10-31 00:42:36

+1

如果您想知道,-858993460 = 0xCCCCCCCC,一個用於在調試模式下編譯程序時填充堆棧的公共值。 – rcgldr 2014-10-31 01:57:32