포인터 상수 , 상수 포인터 상당히 헷갈린다.


차근 차근 풀어써 이번에 꼭 기억 해야지.... 기억 보다는 이해가 좋을듯


포인터 상수


흔히 배열을 포인터 상수 라고 합니다. 


char test[] = "abcde";    test는 포인터 상수 라고 한다. 


위 배열의 선언에서 배열명은 test , 배열명은 배열 전체를 의미 하기도 하지만 

배열의 시작 주소 값을 나타 내기도 한다.

배열의 시작번지는 test[0]의 주소값 &test[0] 이다.

배열은 시작번지 부터 차례로 메모리상에서 연속적으로 붙어 있는 상태 인데 test의 주소가 변하게 되면 배열이 

엉망으로 이루어 진다. 

따라서 test의 주소가 변하지 않도록 현재 주소 값이 상수로 지정되어 있다.


캬.... 쉽다.... 이렇게 하니깐 쉽네.. 배열은 흔히 알수 있듯이 주소가 이어져 있다 근데 주소가 바뀌면 안되니깐 상수로 되어 있어야 한다. 따라서 배열은 포인터 상수다 . 포인터 상수는 주소값이 바꿀수 없도록 한 상태 이다.~!


단, 주소값은 고정 되어 있지만 주소값이 가리키는 대상체는 얼마든지 바꿀 수 있다..~!~! 명심 하도록 ~!~!




상수 포인터 


const는 변수를 상수화 해주는 키워드 이다. #define도 특정 문자열을 상수화 하지만 const와 다르게 전처리기에 의한 치환에 의해 코드에 삽입된다는 것이 다르다..


const char *test = "abcde";   여기서 test는 상수 포인터(상수지시포인터)


*포인터 상수는 주소값이 상수 이기 때문에 주소값이 변화가 안되지만 대상체는 

 변경이 가능 하고 (값을 변경)

 상수 포인터는 타입만 맞다면 다른 대상체로 가리킬수가 있다.


const char *test = "abcde";

test = "12345";


그런데 const 가 앞에 있을때가 있고 뒤에 있을때가 있다..~! (어렵다 ㅜㅜ)


const char *test =  "abcde";       // 상수 포인터

char *const test = "12345";      // 포인터 상수

const char *const test = "good"; // 상수지시포인터상수 (완전 변경 불가능)


배열이 포인터 상수 인 부분이 제일 중요 한것 같다..


외울려고 하지 말고 컴퓨터를 이해 하자~~


참고) http://thrillfighter.tistory.com/88





 














+ Recent posts