C언어 포인터 변수 이해
반응형
char* str = "a";

str = toupper(*str); 
printf("%c\n", str);

str = tolower(str); // 여기서 왜 tolower(*str)는 안되나요?
printf("%c\n", str);

OUTPUT
A
a

설명:

char* str = “a”;

char* str 는 포인터 변수입니다. str에는 “a”의 주소값이 저장됩니다.

str = toupper(*str);

*str는 포인터 변수가 가르키는 값을 가지고 있으므로 ‘a’이고 toupper 함수의 리턴 값은 캐릭터의 정수값입니다. 결국 str에는 ‘A’의 정수값인 65가 저장됩니다. 

printf(“%c\n”, str);

str에는 65 정수값이 그리고 대응되는 캐릭터는 ‘A’ 그러므로 ‘A’를 출력합니다.

str = tolower(str);

str에는 65가 들어있고 소문자로 변경합니다.

여기서 tolower(*str)일 경우에는 에러가 발생합니다. 왜 그럴까요?

현재 str에는 65라는 정수값이 들어있는데 이 말은 즉 포인터 변수인 str에 65가 저장되어 있다는 말입니다. *str는 메모리 주소가 65인 곳의 값이라는 말인데 해당 메모리 주소로는 엑세스가 불가능하기 때문에 Segmentation fault (core dumped) 에러가 발생하게 됩니다.

printf(“%c\n”, str);

마지막으로 tolower(str)에서 받은 97 정수값인 ‘a’ 캐릭터를 출력합니다.

<< 다음 혼자 공부하는 C언어 이전 >>
반응형

'프로그래밍 > C' 카테고리의 다른 글

C언어 문자열 (String)  (0) 2019.11.08
C언어 배열 (Array)  (0) 2019.11.05
C언어 반복문 (Loop)  (0) 2019.09.25
C언어 Switch 조건문 사용법  (0) 2019.09.25
C언어 조건문 (if)  (0) 2019.09.19