我不明白这是什么线做:铸造的指针的整型常量
((struct Example*) 0x10000)
我写了一个测试程序:
#include <stdio.h>
struct Elf{
int bla;
char bla2;
};
int main(){
struct Elf *elfPtr;
printf("Before casting: %p\n", elfPtr);
elfPtr = ((struct Elf *)0x10000);
printf("After casting: %p\n", elfPtr);
return 0;
}
输出是:
投射前:0xb776dff4
投射后:0x10000
这条线只做这个吗?
elfPtr = 0x10000
在投射之前它正在打印一个垃圾地址,另外使用'%p'正确投射是'void *'.so'printf(“投射后:%p \ n”,elfPtr);'应该写成' printf(“铸造后:%p \ n”,(void *)elfPtr);'正确。 –
由于'elfPtr'没有被初始化,第一个'printf()'调用未定义的行为。 – alk
@alk你确定检查未初始化的指针是未定义的行为吗?我认为价值是未定义的,但不是行为(即它将具有价值,并且该价值不会改变)。 – pburka