我正在测试这段代码,但为什么完全没有错误?

#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/

10-11 22:07