2016-12-19 7 views
1
int i = 7, j = 3; 
int *a = &i, *b = &j; 
cout << (*a = *b) << ", " << *(*(&a)); 

출력이 3, 7 인 이유를 설명해 주실 수 있습니까?C++의 출력 관련

+7

함수 인수의 평가 순서는 정의되지 않습니다. 모든 포인터를 사용하는 것은 문제를 혼란스럽게합니다. – BoBTFish

+0

저는 멍청 해요. 그리고 이것은 프로그래밍 수업의 이전 시험이었습니다. 방금 Code :: Blocks에 입력 한 내용과 대답은 3, 7이었습니다. 왜 그런지 모르므로 여기에서 묻고 있습니다 ... – Ned

+0

내 대답은 바로 alexeykuzmin0 's의 매우 짧은 버전이었습니다. 하지만 당신이 왜이 결과물을 얻었는지 모르겠다면 아마도 어떤 특정한 출력을 기대할만한 이유가있을 것입니다 (질문에 이런 종류의 정보를 포함하는 것이 도움이되지만, 지금은 중요하지 않습니다). 이것은 아마도 왼쪽에서 오른쪽 방향의 특정 순서로 인수가 평가 될 것으로 예상했기 때문일 수 있습니다. 내 의견의 간결함으로 인해 그것이 분명했거나 어리석은 짓을 한 것을 의미하지는 않았습니다. 방금 전 답변을 쓸 시간이 없었습니다. – BoBTFish

답변

6

귀하의 코드를 단순화 할 수있다 : 여기서 변수 i

int i = 7, j = 3; 
cout << (i = j) << ' ' << i; 

는 같은 성명에서 액세스 및 변경됩니다. 동일한 문장의 다른 부분에 대한 평가 순서는 C++ 표준에 지정되어 있지 않으므로 컴파일러는 순서에 관계없이 계산할 수 있으며 결과는 다른 컴파일러 (또는 동일한 컴파일러의 다른 버전 또는 다른 실행)에서 다를 수 있습니다 같은 소스 코드에서 동일한 컴파일러를 사용하거나 심지어 동일한 컴파일 된 프로그램을 실행하는 경우).

하나의 명령문에서 변경하고 액세스하는 코드를 작성하지 마십시오.

+0

답변 해 주셔서 감사합니다. – Ned

+0

한 번 더 질문 할 수 있습니까? 어떤 출력물은 "(i = j)"가 생성되어야 하는가? 변수 i의 변경된 값입니까? – Ned

+1

@Ned 기술적으로는 할당 된 값입니다. –