전역 범위의 함수에서 정의 된 정적 변수를 방문하여 수정하려고하지만 출력의 두 번째 및 세 번째 줄이 예기치 않은 이유는 무엇입니까?정의 된 함수 외부에서 로컬 정적 포인터 변수 조작
#include <iostream>
using namespace std;
int * foo(){
static int *x = new int(5);
cout << *x << '\t' << &x << endl;
*x++;
return x;
}
int main(){
int * ox;
ox = foo();
cout << *ox << '\t' << &ox << endl;
*ox++;
cout << *ox << '\t' << &ox << endl;
int * t= foo();
}
출력은 (내 컴퓨터에서)입니다 :
5 0x6021d0
0 0x7fffdc82d3a0
0 0x7fffdc82d3a0
0 0x6021d0
모든 의견을 환영합니다.
@ 5gin12eder 아니요,'* x ++'는 역 참조 할 때 접미사 연산자에서 임시를 사용합니다. 이미 증가 된 포인터를 역 참조하지 않습니다. 사실, 그것은'* (x ++)'로 해석되지만'(x ++)'의 결과는 "old"'x'와 임시로 동일합니다. – vsoftco
@vsoftco 아, 맞아. 그것을 간과했다. 정의되지 않은 동작은 포인터가 다음에 참조 해제 될 때 발생합니다. – 5gon12eder
'& x'을 발견했습니다. –