얼마전에 printf에 대한 질문을 받았습니다..

뭐.. 완전 멘붕이었죠


혹시 아래 2개의 차이점이 뭔지 아시나요?

printf("%d\n",sizeof('a'));

printf("%d\n",sizeof("a"));


첫번째 printf는 컴공을 1학기라도 다니신분들은 왠만하면 다 알겠죠??

'a'에 대한 크기를 포맷스트링("%d")에 맞춰 출력해주는 겁니다.


두번째 printf는 언뜻보면 첫번째거랑 비슷한데 쌍따옴표.. double qoutation이라는 점이 다른거죠

"a"에 대한 크기를 포맷스트링("%d")에 맞춰 출력해주는 겁니다.


그래서 위에 둘 모두 "2"라고 생각하셨다면 틀렸습니다.

저도 .. 머지 .. 싶었는데요 


결과는 아래와 같습니다.

=============================

printf("%d\n",sizeof('a'));   //4

printf("%d\n",sizeof("a"));  //2

============================


C언어에서 'a'에 대한 처리를 할 때 리터럴 변수로 취급된다는 점입니다.

"a"는 그냥 변수로 취급되고요.

여기서 리터럴 변수란 검색하면 다들 아시겠지만 변하지 않는 값을 말합니다.

초기화된 값도 리터럴 변수이죠. 그런데 문제점은 위에 printf는 둘다 리터럴 변수라고 생각 할 수 있지만

C언어 컴파일러에서 홑따옴표에 대해서는 리터럴 변수라고 취급된다는 점..


학교에서는 가르쳐주지 않으며 실무에서 사용하지 않는 C언어 특성이라는 점을 생각하면 될것 같습니다.

그런데 이런 질문을 한것 자체가 신기하네요.. 하하;;

'소소한 나의 일상' 카테고리의 다른 글

횡단보도 설치하는 법 아시나요??  (0) 2017.04.18
brownie cookies 초코칩의 신세계  (0) 2017.04.17
차돌박이 떡볶이 맛잇졍  (2) 2017.04.15
대건물주 키우기  (1) 2017.04.14
나라별 육아법 고찰..  (1) 2017.04.11
조회수 확인