• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

포인터와 배열 기반 문자열과 둘의 차이에 대해

23.06.28 21:25 작성 조회수 241

0

포인터와 배열 기반 문자열과 둘의 차이에 대해, 제가 이해한 것이 맞는지 확인 해 주실 수 있으신가요?

항상 감사드립니다.

  1. [ 포인터 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 .. .을 하나씩 복사하게 만들어지는 경우도 있습니다.
이럴 땐 미리 데이터 영역에 할당된 것은 아니겠죠.

 

감사합니다!