본문 바로가기

예전/C, C++

char* char[] 을 검색해봤당


알고리즘 풀다가

char* char[] 을 검색해봤당


https://kldp.org/node/114515 




const char* str1 = "abc";

const char str2[] = "def;


"abc"가 const 영역에 잡힌다. 

str1 은 "abc" 위치를 가리키는 포인터를 갖게된다. 

함수에서 return 할 경우 제대로 "abc" 가 제대로 return 된다. 

str1[0]으로 접근하면 memory read 가 2번 발생한다. 

str1이 가진 포인터를 읽고, 그 포인터가 가리키는 data를 읽는다.



str2는 4byte의 스택에 할당해서 할당한 스택의 주소를 b가 갖는다. 

스택에 있는 str2에 const에 있는 "def"를 복사해넣는다.

str2를 갖고있는 "def" 는 스택영역에 있기때문에 함수에서 return을 하여 참조하려 하면 이상한 값이 나온다.

str2[0]으로 접근하면 memory read가 1번 발생한다.

str2는 스택의 주소이므로 스택 포인터로 offset을 구할 수 있고 이것이 가리키고 있는 곳의 data를 한번 읽는다. (!?)


용도에 따라 다르게 선택


'예전 > C, C++' 카테고리의 다른 글

call by ~  (0) 2014.12.10
visual studio warning 무시 하는 방법  (0) 2014.05.20
[C++] binding  (0) 2014.01.28
[C++] upcasting  (0) 2014.01.28
[C++] 일반 함수 포인터, 멤버 함수 포인터  (0) 2014.01.28