首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言指標強制轉換:double* 轉 int* 後解引用取值為何為垃圾值

     編輯:程式設計綜合問答

程式碼情境


int *p, k = 10;
double *q, f = 5.6;
p = &k; q = &f;
p = (int*)q; // 強制轉換
// *p 值為何?

記憶體佈局分析

  • double f = 5.6 佔 8 位元組,IEEE 754 二進位表示:
    0x4016666666666666(小端序儲存)。
  • q 指向這 8 位元組起始位址。
  • p = (int*)q 後,p 同樣指向起始位址,但型別為 int*(4 位元組)。
  • *p 讀取前 4 位元組:0x66666666 → 十進位 1717986918(視為有號整數為負數)。

為何答案為「一個整數」

  • *p 確實讀取到一個 int 大小的位元模式,型別上是整數。
  • 但該值**無意義**(垃圾值),非 5、6 或 10。
  • 選項 A「一個整數」為最準確描述:型別正確、數值不可預期。

關鍵觀念

  • 指標轉換**不改變位址**,只改變解讀方式(寬度、有號/無號)。
  • 違反嚴格別名規則,屬未定義行為,實務中嚴禁此類轉換。
  • 若需重新解讀記憶體,請使用 memcpy 或 union。

總結

double* 強轉 int* 後解引用,讀取到 double 記憶體前半部位元模式,型別為整數但數值為垃圾值。選項 A「一個整數」正確描述型別屬性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved