Programming/C Win32 MFC2014. 2. 25. 10:37
c++ 레퍼런스를 보다 보니
포인터에 const가 붙으면 어떻게 접근보호가 될지 궁금해 검색을 해보니 똭! ㅋㅋ

const 포인터
const void *p = &ori;
포인터의 주소 변경 불가(레퍼런스 화?) 내용 변경 가능

포인터 const
void const *p;
포인터 주소 내의 내용  변경 불가

const 포인터 const
const void const *p
포인터 주소 및 주소 내의 내용 변경 불가

[링크 : https://kldp.org/node/48414]
[링크 : http://quoobit.egloos.com/1379839]

+ 특이사항으로는..
const 변수를
포인터로는 조작이 가능하다는거.. 당연한걸지도 모르겠지만... ㄷㄷㄷ 

int main()
{
        const int a = 0;
        int *p;

        p = &a;

        printf("%d %d\n",a,*p);

        *p = 2;
//      a = 1;

        printf("%d %d\n",a,*p);

        return 0;
} 

$ ./a.out
0 0
2 2

어짜피 const는 컴파일 타임에 결정되는 것 이기에
메모리 상에 주소로 접근시에는 해당 메모리 영역이 read-only인지 알 수 없기에
포인터로 (const 포인터 const라면 안되겠지만) const 영역의 데이터를 조작이 가능하다는 놀라운(?) 사실 ㄷㄷ

---
2014.3.5 추가
gcc 에서는 문제없이 되지만 vs2008에서는 에러가 난다. 
1> error C2440: '=' : 'const int *'에서 'int *'(으)로 변환할 수 없습니다.
1>        변환하면서 한정자가 손실됩니다. 

또한 gcc에서 되던 문법이 경고가 발생한다.
const int const *p1;
1> warning C4114: 동일한 형식 한정자를 두 번 이상 사용했습니다.  



'Programming > C Win32 MFC' 카테고리의 다른 글

2중 포인터 사용이유  (0) 2014.03.19
typeof  (0) 2014.03.11
assert()  (0) 2013.12.18
printf의 %s와 %S  (0) 2013.06.15
win32api - joystick 예제  (0) 2013.06.15
Posted by 구차니