[ C ] 문자열과 문자열 포인터

반영서·2023년 1월 1일

C / C++

목록 보기
2/5
post-thumbnail

[ C ] 문자열과 문자열 포인터

c에서 문자열을 표현하는 방법은 크게 세 가지가 있다.

char a[10] = "hello a";
char b[] = "hello b";
char *c = "hello c";

a와 b는 배열을 이용해서 표현하고 있다는 것은 알겠는데, c는 뭘까?

사실 문자열은, 그 문자열이 시작되는 주소를 가리킨다.

또한 배열은, 그 배열이 시작되는 주소를 가리킨다.

그러니까, 위 코드의 세 번째 라인의 코드의 경우, “hello c”라는 문자열의 시작주소를 포인터 변수 c에 할당한 것이다.


어, 그럼 반대로 배열 a에 문자열의 시작주소를 넣으면 컴파일 에러가 떠야하는거 아닌가요?

맞다.

char a[10] = "hello a";
a = "change";          // compile error

문자열 a는 &a[0]과 같다. 즉, 문자 배열의 시작 주소를 가리키고 있는데, 이 주소를 마음대로 다른 문자열 주소를 가리키게 할 수는 없는 것이다.(포인터 문자열은 가능)

다만, 선언과 동시에 초기화를 할 경우에는, 각각 배열의 요소를 초기화하는 식으로 이루어지기 때문에, char a[10] = “hello a”와 같은 코드가 가능한 것이다.



또한, 포인터 문자열과 배열 문자열에도 차이는 존재한다.
char a[10] = "hello a";
char *c = "hello c";
a = c;                  // compile error
c = a;                  // 정상적으로 동작함
  1. 원소 접근은 가능하나, 원소의 값을 수정하는 것은 배열 형태로 선언한 문자열만이 가능하다.
  2. 문자 배열 주소를, 다른 문자열의 주소로 바꾸려하면 컴파일 에러가 발생한다.
  3. 반대로, 포인터 변수에는 다른 문자열의 시작 주소를 대입할 수 있다.
profile
커지고 싶은 신입개발자

0개의 댓글