#include <stdio.h>
int main() {
char c = 'A';
int *int_ptr;
double *double_ptr;
*int_ptr = *(int *)&c;
*double_ptr = *(double *)&c;
printf("Original char = %c \n", c);
printf("Integer pointer = %d \n", *int_ptr);
printf("Double pointer = %f\n", *double_ptr);
return 0;
}
的追問是 - 爲什麼我不能指定使用此代碼的double_ptr
,因爲它會導致分段錯誤,但是對於整數正常工作?演員指針類型
據我所知char是1個字節長,int是4個字節長,所以double是8個字節長。
通過使用表達*(double *)&c
我想到以下幾點:
- & - 獲取C的內存地址。
- (double *) - 假設這是一個加倍的指針。
- *() - 獲取實際值並將其分配給double var。
1)你知道你在做什麼是「錯誤的」。 2)如果你很好奇你爲什麼會出現分割錯誤,爲什麼不用-S(gcc)或/ Fa(MSVC)編譯並查看程序集輸出? – paulsm4
首先你沒有任何指針後面的內存,所以'* int_ptr'尋址不屬於你的內存,即UB。您甚至不知道指針未初始化的位置。除此之外,您嘗試使用int(4或8字節)再次讀取char(1字節),這也是UB。 – 4386427