我正在测试这段代码,但为什么完全没有错误?
#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
是整数而不是字符,为什么根本没有错误? 最佳答案
在你的情况下
p0 = (char*) p;
是有效的,因为
char *
可用于访问任何其他类型。相关,引用 C11
,章节 §6.3.2.3但是,万一
printf("Address = %d, value = %d\n", p0, *p0);
导致 undefined behavior ,因为您将指针 (
p0
) 传递给 %d
(查看转换说明符和相应参数的第一“对”)。您应该使用 %p
并将参数转换为 void *
,例如 printf("Address = %p, value = %d\n", (void *)p0, *p0);
那么,来回答
因为问题不在于编译器应该提示的语法或任何约束违规。这纯粹是滥用给定的权力。 :)
关于c - 完全没有错误,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42852431/