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

C++ 變數取址傳遞給指標參數:為何必須加 &?本質與語法規範的區別

     編輯:程式設計綜合問答

程式碼片段

CBitmap qwe;
qwe.LoadBitmapW(IDB_BITMAP1);
yy[1].brush.CreatePatternBrush(&qwe); // 必須加 &

錯誤:無法從 CBitmap 轉換為 CBitmap*

語法層面:類型匹配規則

  • CreatePatternBrush(CBitmap*) 參數型別是「指向 CBitmap 的指標」。
  • qwe 是 CBitmap 物件(值語意),非指標。
  • &qwe 取得物件在記憶體中的位址,型別為 CBitmap*,滿足參數要求。

本質層面:指標也是資料

  • 指標本質:佔用記憶體(32 位元 4 bytes / 64 位元 8 bytes),儲存一個「位址數值」。
  • 若你已知 qwe 位址為 0x00000001,直接呼叫 CreatePatternBrush(0x00000001) 在底層完全合法(編譯器可能警告型別不符,但機器碼可行)。
  • C++ 強型別系統強制你用 & 運算子明確表達「取址」意圖,避免誤傳整個物件副本或整數常數。

總結

「必須取址才能配合指標使用」在語法規範上正確;在底層本質上,指標只是儲存位址的整數,若能確保位址正確,直接傳數值也可執行。請遵循語法規範,老實寫 &qwe。

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