이 코드를 테스트 중이지만 오류가없는 이유는 무엇입니까?전혀 오류가 없습니다. 이유가 무엇입니까?
#include <stdio.h>
int main()
{
int a = 1025;
int *p;
p = &a;
// now I declare a char variable ,
char *p0;
p0 = (char*) p; // type casting
printf("", sizeof(char));
// is %d correct here ?????
printf("Address = %d, value = %d\n", p0, *p0);
}
내 질문 : 여기에 올바른 %d
인가? %d
은 문자가 아닌 정수이므로 왜 아무런 오류가 없습니까? char *
가 다른 유형에 액세스하는 데 사용할 수 있기 때문에 귀하의 경우
p0 = (char*) p;
에서
실제로 문제는 주소를 전달하는 첫 번째'% d '입니다 :'% p'를 사용해야합니다. 'printf ("Address = % p, value = % d \ n", (void *) p0, * p0);'두 번째의 경우'char' 값은'int'로 승격됩니다. – LPs
또한 에러/경고는 코드를 컴파일하는 방법에 따라 달라집니다 :'gcc -Wall -Wextra -pedantic-errors test.c -o test -std = c11 -g'을 사용하면'warning : format '% d' 인수 2는 'char *'유형을 갖습니다. [-Wformat =] printf ("주소 = % d, 값 = % d \ n", p0, * p0); ' – LPs
[올바른 형식 (주소)?] (http://stackoverflow.com/q/9053658/995714) –