해결된 질문
작성
·
364
0
포인터와 배열 기반 문자열과 둘의 차이에 대해, 제가 이해한 것이 맞는지 확인 해 주실 수 있으신가요?
항상 감사드립니다.
[ 포인터 vs 배열 ]
포인터를 이용한 문자열
const char test1 = “Hello World”;*
“Hello World”는 데이터 영역(.rodata)에 배열의 형태로 할당된다.
포인터 test1은 원본 배열 첫 번째 요소인 ‘H’의 주소를 가진다.
.rodata에 존재하므로 문자열의 각 요소를 수정할 수 없다.
배열을 이용한 문자열
char test2[ ] = “Hello World”;
미리 데이터 영역에 할당된 “Hello World”의 요소를 각각 복사하여 새로운 배열이 할당된다.
배열 이름 test2는 복사된 배열 첫 번째 요소인 ‘H’의 주소를 가진다.
복사된 배열이므로 문자열의 각 요소를 수정할 수 있다.
결론, 포인터와 배열의 차이
배열과 포인터는 본질적으로 다르다.
배열의 이름이 포인터처럼 사용되지만, 포인터가 오직 어떠한 대상을 가리키는 고정 크기의 주소만 가지고 있는 반면, 배열은 이름이 포인터로 동작할 수 있을 뿐 본질은 변수의 모임이라는 여러 바구니로 이루어져 있기 때문이다.
따라서 배열의 크기는 포인터와 달리 타입과 길이에 의해 달라진다.
답변 1
1
네 맞습니다.
const char* test1 의 *이 빠진 것을 제외하면요. (오타 같군요)
미리 데이터 영역에 할당된 “Hello World”의 요소를 각각 복사하여 새로운 배열이 할당된다.
-> 컴파일러에 따라 진짜 H , e, l, l .. .을 하나씩 복사하게 만들어지는 경우도 있습니다.
이럴 땐 미리 데이터 영역에 할당된 것은 아니겠죠.
감사합니다!