본문 바로가기
프로그래밍/사소한 팁

정말 사소한 팁.

by 즐거운 리뷰하는 (게임)프로그래머_리프TV 2010. 3. 19.




int형 레퍼런스를 리턴하는 함수와

쓰일것 같지 않은 캐스팅 연산자,

하지만 알고 있으면 언젠간 쓸일이 있겠지.

있겠지...?

있나..

있을까--a;;

 

#include <iostream>

int n1;

int& fun()	// int& 리턴하는 fun함수
{
	return n1;
}

void main()
{
	int val;
	int *pval = &val;

	*pval = (int)pval;

	fun() = 10;
	std::cout << "n1 : " << n1 <<std::endl;

	std::cout << "pval : " << &pval << std::endl;
	std::cout << "*pval : " << std::hex << *pval << std::endl;
	std::cout << "val : " << std::hex << val << std::endl;
	std::cout << "&val : " << &val << std::endl;
}

 


결과는 다음과 같다.

결과를 보면 알 수 있겠지만,

전역변수 n1의 값이 변한 것을 알 수 있다.

return된 n1의 값에 10이 들어간것,
포인터를 이용해서 그 주소를 사용하여 어떻게 저떻게 하는것도 가능할 법 하지만
너무 복잡하게 생각하진 말자, 일단 그낭하다는 것만 알고 있자.
만약 저렇게 리턴되는 값에 대해서 변경을 막고 싶다면
그냥 앞에 const를 붙히기만 하면 되니 막는 법은 간.단.

pval과 val의 경우엔 사실 구지 실행해 보지 않아도 알 수 있지만,
val의 주소를 val에 넣었다고 보면 된다.

댓글0