我不明白這是什麼線做:鑄造的指針的整型常量
((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