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

C++ MFC 中 INPUT 結構體數組與指針參數傳遞的深層原理解析

     編輯:程式設計綜合問答

SendInput 參數傳遞:數組名 vs 變量名的本質區別

在調用 Windows API SendInput 模擬鍵盤輸入時,第二參數要求 LPINPUT(即 INPUT*),這導致 INPUT iput[1] 與 INPUT iput 的傳遞方式不同,本質是數組退化為指針與變量取地址的區別。

兩種定義方式對比

定義方式內存佈局傳遞給 SendInput 的表達式原理
INPUT iput[1];棧上分配 1 個 INPUT 大小的數組iput (或 &iput[0])數組名在表達式中隱式退化為首元素地址(INPUT*)
INPUT iput;棧上分配 1 個 INPUT 變量&iput變量名不退化,必須顯式取地址運算符 & 獲得指針

核心結論

  • SendInput 第二參數類型為 LPINPUT(INPUT*),需要一個地址值。
  • 數組名 iput 本身就是地址(首元素地址),無需 &。
  • 單變量 iput 是值,必須用 &iput 取其地址。

補充:為什麼定義數組大小為 1?

SendInput 第一參數 nInputs 指定結構體數量。定義 INPUT iput[1] 既滿足「可寻址連續內存」又語義清晰表示「發送 1 個輸入事件」。若需發送多個事件,定義 INPUT iput[N] 並傳遞 iput 即可。

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