지난 시간에 프로세스 메모리 구조에 대해 설명드렸습니다
이 경우, 지역변수가 담기는 스택 공간에
배열을 담을 공간을 만든 경우입니다.
우변의 "aaaaa"는 문자열 상수(문자열 리터럴)입니다.
리터럴 상수는 Text Segment에 저장됩니다.
좌변은 main( ) 함수 내에 선언된 포인터 변수 b입니다.
함수 내에 선언된 변수는 지역변수이므로, Stack Segment에 위치합니다.
Stack에 있는 지역변수이자 포인터 변수인 b가
Text Segment 에 있는 문자열 상수 "aaaaa"를 가리키고 있는 것입니다.
가리킨다는 의미는 가리키는 곳의 주소를 값으로 가지고 있다는 것을 의미합니다.
포인터 변수는 주소를 담는 변수고, 배열을 담을 공간은 없으니까요.
포인터 변수에 배열을 담을 공간이 없으므로
(포인터 변수는 변수의 주소 또는 배열의 맨 앞의 요소의 주소를 담을 공간만 있습니다.)
동적할당을 통해 Heap 영역에 공간을 받은 것입니다.
(char*)malloc(10 * sizeof(char))
를 해석해보면
char 크기의 동적 공간을 10칸 할당 받는데
malloc 함수는 이 10칸 중 첫번째 칸인 cp[0]의 주소를 반환합니다.
그리고 malloc 함수는 (void*) 타입을 리턴하는데
동적할당공간의 주소를 받는 cp가 char* 타입이니
좌변과 우변의 타입을 동일하게 맞춰줘야 합니다.
malloc 함수 앞에
(char*) 으로 형변환을 해준 것이지요
이 글은 동아리 튜터링을 하면서 정리한 글이기에
Medium 동아리 블로그 글과 이어지며
Medium 개인 블로그에도 같이 게시했습니다