함수 B처럼 타입이 기본 자료형인 함수의 호출문은 rvalue여서 주소 연산자 &를 붙일 수 없는데
함수 A처럼 타입이 기본 자료형의 참조자이면 lvalue 판정을 받아 컴파일/실행이 됩니다.
물론 그 포인터를 실제로 따라가려고 하면 (*num1) 프로그램이 아주 높은 확률로 터지겠죠.
함수 B처럼 타입이 기본 자료형인 함수의 호출문은 rvalue여서 주소 연산자 &를 붙일 수 없는데
함수 A처럼 타입이 기본 자료형의 참조자이면 lvalue 판정을 받아 컴파일/실행이 됩니다.
물론 그 포인터를 실제로 따라가려고 하면 (*num1) 프로그램이 아주 높은 확률로 터지겠죠.
답변 감사합니다
그런데 프로그램이 터진다는 게 정확히 무슨 뜻인지 알 수 있을까요?
이 경우에는 segmentation fault가 난다고 보시면 됩니다.
제 환경에서 실행했을 때는 14줄에서 num1에 들어가는 값이 0이었는데,
A 함수의 파라미터 t가 있었던 실제 주소값이 들어가는 경우도 가능한지는 잘 모르겠습니다.
댓글을 작성하려면 로그인해야 합니다.
dongwha410 1년 전
이 코드에서 int* num1 = &A(num);는 되는데
int* num2 = &B(num);은 오류가 발생합니다
함수B(num)에 경우에는 따로 다른 곳에 할당해서 상수 판정이 되어야 &연산자를 쓸 수 있다는 것은 알고있지만
함수 A의 경우에는 왜 그냥 되는 것인지 잘 모르겠습니다