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 변수를
포인터로는 조작이 가능하다는거.. 당연한걸지도 모르겠지만... ㄷㄷㄷ
어짜피 const는 컴파일 타임에 결정되는 것 이기에
메모리 상에 주소로 접근시에는 해당 메모리 영역이 read-only인지 알 수 없기에
포인터로 (const 포인터 const라면 안되겠지만) const 영역의 데이터를 조작이 가능하다는 놀라운(?) 사실 ㄷㄷ
---
2014.3.5 추가
gcc 에서는 문제없이 되지만 vs2008에서는 에러가 난다.
또한 gcc에서 되던 문법이 경고가 발생한다.
포인터에 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 |