본문 바로가기
컴퓨터/전산, 그 외

포인터와 const, 배열에 대한 포인터

by adnoctum 2014. 12. 4.




   나중에 참고할 목적으로 작성해 놓는다, ㅋ. 원리가 없기에 외워야 하나 그러긴 귀찮은데 필요한 경우가 있으니 말이다, ㅋ.



code는 /chip_data/GEO/make_tissue_specific_gene_expr_fig.cpp



95번째 줄의 기본형태는 


const unsigned char (* const V )[3]



앞의 const 에 의해 포인터형 변수 가 가리키는 주소에 있는 값을 변경하지 않을 것임을 명시,  

뒤의 const 에 의해 포인터형 변수 V 가 가리키는 주소를 변경하지 않을 것임을 명시, 

unsigned char 의 3개의 요소로 된 배열을 가리키는 포인터 선언 방식. 


역시나. 한 눈에 와 닿지 않는다. 그림으로 표현해 보자. 





V 라는 변수 역시 메모리에 존재하는 값이니 그 자체가 주소를 갖고 있다. 뒤의 const 는 이 주소에 있는 값, 즉 또 다른 주소, 그 주소를 고정시키는 역할. 앞에 있는 const 는 그 주소에 해당하는 변수의 값을 고정하는 역할. 



따라서, 일반적으로 함수의 실행 결과를 반환하기 위해 parameter로 pointer 를 받을 땐 뒤의 const 를 사용하면 된다, 코드 96, 97 번째 줄처럼. 즉, 이 경우 반환받아야 할 변수의 주소를 넘길테니 이 주소는 변경이 되지 않아야 하므로 const 를 사용하면 되고, 그 주소에 있는 값은 변경이 되어야 하니 const 는 사용하지 않으면 된다.