2017년 3월 7일 화요일

코딩삽질노트 - const 포인터


version 3

int* const p = &a; (포인터)를 (상수)로 만든다
const int* q = &b;  (상수)를 포인트 한다
const int* const r = &c; ((상수)를 포인트)하는것을 (상수)로 만든다
int const*  h;  (상수)를 포인트 해준다.



version 2

int* const p = &a; // 시작과 동시에 초기화 해야하고, 해당 주소를 바꾸 수 없음. 포인트 하는 변수의 값을 바꾸 수 있음.
  const int* q = &b; // 시작과 동시에 초기화 안해도 되고 나중에 주소 대입해도됨. 근데 포인트 하는 변수 값 못 바꿈.
  const int* const r = &c; //시작과 동시에 초기화 해야하고, 값도 못바꿈

  int const*  h; //시작과 동시에 초기화 안해도되는데, 포인트 하는 대상 값 못바꿈




version 1

Const int * pointer VS int * const pointer
뭔차이지??
: 자기 자신을 못바꾸게 할껀지 / 상대방의 값을 못바꾸게하고 참조만 할껀지
const int * ptr 이면 ptr이 가르키고있는 타입이 int const 가 됨 >> 참조 가능 값 변경 불가
따라서 *ptr = 40; 의 연산 불가, 그러나 포인터가아니라 그 변수를 직접 변경하는 것은 상관없음. Const는 오직 포인터만 상수로 만들어주기때문 지금상황에서는

int * const ptr 이면 const ptr이 가르키고있는 타입이 int * 이므로 가르키는 값은 상수가 아니니 바꿀수있음 그러나 자기 자신은 상수 const상태이니 어떤 값을 대입하거나 변경할수없음

따라서 후자의 경우 *ptr = 40; 같은 연산이 되는이유가 int *이 가르키는 상수를 바꾸는거니까 되고, ptr=&num2 같이 자기가 가르켜야하는 대상은 변경할수없는상태인거임


>>틀리면 개쪽

댓글 없음:

댓글 쓰기