2014-10-30 2 views
0

1 차원 배열을 성공적으로 뒤집었지만 내용을 알아 내면 내용이 다른 숫자로 인쇄됩니다.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 (배열)'은 생각했던대로 작동하지 않습니다. – drescherjm

+2

이 답변을보십시오 http://stackoverflow.com/questions/37538/how-do-i-determine-the-size-of-my-array-in-c – Hagai

+2

거의 모든 옵션 인 경우, 난 소스를 거쳐 그냥 사용 : 메인()에서 [**'std :: reverse' **] (http://en.cppreference.com/w/cpp/algorithm/reverse). – WhozCraig

답변

1

그래서 그것의 조건 부분은 i < ROW된다 mainfor 루프를 수정하고 i < row/2가 읽어 flipRow 그래서 조건 부분에 for 루프를 수정합니다. sizeof 연산자는 배열 의 크기를 바이트 단위로으로 반환합니다. 배열에 4 개의 요소가 있고 그것들은 정수형입니다. 이것은 플랫폼에서 4 바이트이므로 sizeof에 대한 호출은 16을 반환합니다.

+0

위대한 작품. 고맙습니다. – JOH

+1

궁금한 점이있는 경우, -858993460 = 0xCCCCCCCC는 프로그램이 디버그 모드로 컴파일 될 때 스택을 채우는 데 사용되는 공통 값입니다. – rcgldr