2012-08-13 43 views
3

鑑於這種結構:結構聲明WLAN_AVAILABLE_NETWORK網絡[1];

typedef struct _WLAN_AVAILABLE_NETWORK_LIST { 
    WLAN_AVAILABLE_NETWORK Network[1]; 
} *PWLAN_AVAILABLE_NETWORK_LIST; 

是什麼聲明WLAN_AVAILABLE_NETWORK Network[1]是什麼意思?

+0

這將是有益的,看看有什麼'WLAN_AVAILABLE_NETWORK'不過是我的第一個猜它是模仿不氾濫代碼通過引用以'& ',與'gmp'類似。 – pmr 2012-08-13 15:11:21

+1

@pmr,http://msdn.microsoft.com/en-us/library/windows/desktop/ms707403(v=vs.85).aspx – chris 2012-08-13 15:12:16

回答

9

它看起來可能Network旨在作爲flexible array member。通過以sizeof(Network) * (n - 1)字節過量分配結構,庫和客戶端代碼可以訪問超過結尾的結尾,就好像數組成員長爲n一樣。

庫代碼:

PWLAN_AVAILABLE_NETWORK_LIST list = malloc(sizeof(_WLAN_AVAILABLE_NETWORK_LIST) 
    + (sizeof(WLAN_AVAILABLE_NETWORK) * (n - 1))); 
for (int i = 0; i < n; ++i) { 
    list->Network[i] = ...; 
} 

客戶端代碼:

for (int i = 0; i < n; ++i) { 
    do_something(list->Network[i]); 
} 
+1

我正要輸入這個。函數[WlanGetAvailableNetworkList](http://msdn.microsoft.com/en-us/library/windows/desktop/ms706749.aspx)只給調用者一個指向結構體的指針,該結構體具有該數組作爲另一個成員。 – mkb 2012-08-13 15:16:00

+0

謝謝你很好的解釋 – david 2012-08-24 10:46:17

1

typedef struct _WLAN_AVAILABLE_NETWORK_LIST {聲明一個結構名爲_wlan...list

WLAN_AVAILABLE_NETWORK Network[1];假設一個結構稱爲WLAN_AVAILABLE_NETWORK某處聲明。它是長度爲1(無意義)的數組,稱爲網絡。

} *PWLAN_AVAILABLE_NETWORK_LIST;立即創建此結構的(指針)變量,名爲pwlan...list

+0

是的,可能是指針變量可以通過分配指向某些變量內存,並通過使用該數組變量,我們可以相應地使用..謝謝 – david 2012-08-24 10:55:10