#include <stdio.h>
void main()
{
int i,result;
printf("수:");
scanf_s("%d", &i);
if (i % 2 == 0)
result = "짝수";
else result = "홀수";
printf("입력한 수 %d은(는) %s입니다.", i, result);
}
if else문 안에서 result가 문자열로 저장되는데
result는 정수형으로 선언되있음
이게 왜 쳐 돌아가는지 이해를 못하겠는데 설명좀 해주실분;;
안되는데?
리터럴 문자열은 주소를 반환하기 때문. const char*가 int로 묵시적 변환됐을듯
ㄴ제 컴퓨터에선 잘 돌아가는데 이게 대체 어찌된일이죠.
컴파일러 뭐쓰시는데요 - dc App
컴파일러 뭐쓴느데여
ㄴ 그냥 비주얼 스튜디오 깔고 아무것도 설정안하고 쓰고있는데 어떤건지 모르겠습니다ㅜㅜ 늅입니다 형님들
ㄴ 버전은 비주얼 스튜디오 2017입니다ㅠㅠ
문자열 " " 안에 넣어야지 - dc App
쌍따옴표 출력 안되네 저거 쌍따옴표임? - dc App
쉽게말하면 C언어가 자잘한 규칙같은건 컴파일러마다 알아서 구현하라 그래서 같은 코드라도 컴파일러마다 결과가 달라질수 있어여
특히 MSVC는 C언어 지원을 개차반으로 해서 그냥 잠온다 말대러 타입캐스팅되는구나 하고 넘어가세여
윾동코드 - 쌍따옴표 안에 넣은겁니다!!
ㅇㄹㅇ - 컴파일러가 자동 변환시켜 주는게 있고 안시켜 주는게 있는거군요 감사합니다
저게 왜 안될 꺼라 생각하는 거임? 어차피 일반적인 컴퓨터는 IA32아니면 AMD64인데 보통 32비트 프로그램일 경우 메모리 주소는 4바이트이고, int형도 4바이트임
저 경우 상수 문자열의 주소값을 반환하고, int형에는 그 값이 들어감
그리고 printf함수에는 int형 변수에 들어가 있던 주소값이 넣어짐
https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models
항상 sizeof int == sizeof pointer 가 아님
주소값 반환
근거는 printf("입력한 수 %d은(는) %s입니다.", i, result); 부분
이해안가면 공부 더하셈