在調用 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 取其地址。SendInput 第一參數 nInputs 指定結構體數量。定義 INPUT iput[1] 既滿足「可寻址連續內存」又語義清晰表示「發送 1 個輸入事件」。若需發送多個事件,定義 INPUT iput[N] 並傳遞 iput 即可。