dongwha410   1년 전

이 코드에서 int* num1 = &A(num);는 되는데

int* num2 = &B(num);은 오류가 발생합니다

함수B(num)에 경우에는 따로 다른 곳에 할당해서 상수 판정이 되어야 &연산자를 쓸 수 있다는 것은 알고있지만

함수 A의 경우에는 왜 그냥 되는 것인지 잘 모르겠습니다

zenith82114   1년 전

함수 B처럼 타입이 기본 자료형인 함수의 호출문은 rvalue여서 주소 연산자 &를 붙일 수 없는데

함수 A처럼 타입이 기본 자료형의 참조자이면 lvalue 판정을 받아 컴파일/실행이 됩니다.

물론 그 포인터를 실제로 따라가려고 하면 (*num1) 프로그램이 아주 높은 확률로 터지겠죠.

dongwha410   1년 전

답변 감사합니다

그런데 프로그램이 터진다는 게 정확히 무슨 뜻인지 알 수 있을까요?

zenith82114   1년 전

이 경우에는 segmentation fault가 난다고 보시면 됩니다.

제 환경에서 실행했을 때는 14줄에서 num1에 들어가는 값이 0이었는데,

A 함수의 파라미터 t가 있었던 실제 주소값이 들어가는 경우도 가능한지는 잘 모르겠습니다.

댓글을 작성하려면 로그인해야 합니다.