얼마전에 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 |