문자열은 포인터로 처리된다.

c언어에서는 문자열 마지막에는 항상 '\0'  널 문자가 있기 때문에 배열 선언시 + 1칸 더해줘야 한다.

c언어에서 널문자로 문자열 끝임을 인지한다.

몰론 널 문자 없이 꽉꽉 채워 저장할 수는 있지만, 그 경우 문자열로서 가치는 사라진다.

char v[4] = "ABC" ; vs const char* v = "ABC";

배열을 하나 만들고 네글자를 삽입하는 방식  vs 포인터를 이용해 문자열 상수를 가리키는 방식이다

무슨 차이가 있을까?

const char* v = "ABC";

포인터로 문자열을 가리키는 것부터 알아보자!

"ABC"는 코드상에서 리터럴로 메모리에서 읽기 전용의 데이터 세그먼트 영역에 저장된다.

포인터는 리터럴의 주소를 가리키게 되고 따라서 수정이 불가능하다.

const는 해당 데이터가 변경되지 않음을 보장한다.

char v[4] = "ABC";

배열을 선언하고 초기화를 할 경우, 해당 리터럴이 배열이 저장되어 있는 메모리 공간에 복사가 되어 저장된다.

  • Static : 전역 변수일 경우
  • Stack : 지역 변수일 경우

어느 곳이든 둘다 수정이 가능하다.

 

따라서 char v[4] = "ABC" ; vs const char* v = "ABC" 는 포인터가 가리키고 있는 메모리 영역이 다르며,  그 차이에 따라서 수정 여부가 달라진다.

 

+ Recent posts