#include<stdio.h>
void main()
C언어에서 이렇게 실행했는데 "으앙" 이 나오더라고 왜이러는거야 ? 저게 실행됏다는건 참값 (1) 이라는 소린데 어떻게 그렇게 되는거지 ?... @@
이유좀 자세히 알려주시면 감사하겠습니다.. str이 문자열들을 가리키는데.. 어떻게 이렇게 되는건지 .. |
<!-- 130429 본문 광고 -->
#include<stdio.h>
void main()
C언어에서 이렇게 실행했는데 "으앙" 이 나오더라고 왜이러는거야 ? 저게 실행됏다는건 참값 (1) 이라는 소린데 어떻게 그렇게 되는거지 ?... @@
이유좀 자세히 알려주시면 감사하겠습니다.. str이 문자열들을 가리키는데.. 어떻게 이렇게 되는건지 .. |
참=0이 아닌 모든 값. 1은 그냥 대표에요. 문자열은 암튼 0은 아닐테니(?) 참 인듯.. 저도 입문이라 정확히는 몰라요
꼬꼬님이 말씀하셨듯이 if 문의 참,거짓을 정의할때 [ 참 == 0을 제외한 나머지 " 모든수 " ] [ 거짓 == 0 ] 이렇습니다. 그런데 if ( str ) { 실행문 }else { 실행문 } 이렇게 하셨는데요 , 이때 str 이 문자열이 아니라 str의 주소값으로 if 조건문 안에 들어갑니다. 저같은 경우는 디버거를 돌려보니까 str의 값은 0x003dfe34 이군요 그러니까 즉 컴파일러는 if ( 0x003dfe34 ) { printf("으앙"); } else {printf("00");} 이렇게 된것이지요 ,
그럼 이건 어떨까요 ? if ( *str ) { printf ("으앙"); } else { printf("ㅇㅇ");} 이렇게 하면 str 의주소값을 참조해서 가기때문에 위에처럼 주소값이 아니라 그 주소값에 도착한 첫번째 글자 즉 , 'a' 를 표시하게 됩니다. if ( a ) { printf("으앙");} else{ printf("ㅇㅇ");} 일경우 는 질문자님이 원하는경우가 되지 않을까요 ? 그런데 재미있게도 이경우에도 "으앙" 이 출력됩니다. 왜냐하면 a 가 아스키코드로 변환되어서 97 이라는 숫자로 변환되기 때문입니다. 컴퓨터가 0과 1로만 이루어저있다는 말 아시지요 ? 문자열도 결국 컴퓨터에게는 숫자에 불과하기때문에 참이 되고 "으앙" 이 결과로 나올수 봑에 없습니다.
아 참고로 0x003dfe34 는 16진수 입니다 . 이걸또 십진수로 풀이하면 4062772 됩니다. 좀더 정확한 답은 if ( 4062772 ) { printf("으앙") } else { printf("ㅇㅇ"); } 가 되겠네요