C 将指针转换为非指针类型

C 将指针转换为非指针类型,c,pointers,C,Pointers,将指针转换为非指针类型时会发生什么情况? 例如: int i = 7; int *y = &i; printf("%x %d %x", y, (int)y,7); 编译和运行时的结果是: 29ff00 2752256 7 但实际的结果是什么?这个数字是从哪里来的?它是一个随机数还是与指针所持内容有关 它是否具有诸如地址之类的数学值,或者指针的值是否由某些标准转换?2752256是内存地址29ff00的十进制值。你会得到类似的结果 printf("%x %d", y, y); 这是

将指针转换为非指针类型时会发生什么情况? 例如:

int i = 7;
int *y = &i;

printf("%x %d %x", y, (int)y,7);
编译和运行时的结果是:

29ff00 2752256 7
但实际的结果是什么?这个数字是从哪里来的?它是一个随机数还是与指针所持内容有关


它是否具有诸如地址之类的数学值,或者指针的值是否由某些标准转换?

2752256是内存地址29ff00的十进制值。你会得到类似的结果

printf("%x %d", y, y);

这是C++还是C++问题?请注意,您的代码包含未定义的行为:您将%x格式指定说明符的指针类型传递给Print,而实际上应该传递int类型的参数。使用%P来打印指针。您可能很容易在64位系统上看到它,因为您将给出一个64位参数,而变量函数只读取32位-堆栈上的参数将导致不对齐和垃圾值,尽管确切的行为取决于编译器/ABI/phase of moon。。。。最好使用%p来避免处理UB、trucation和其他有趣的工作人员-当然不能保证它与强制转换相同,因为NULL必须为0,但允许有不同的位表示。