質問970:LPVOID*型を引数とする関数について

int func(LPVOID*) {
?
}
このようなLPVOID*型を引数にもち、そのポインタのポインタに
何らかの4バイトの結果を入れ、戻り値としてint型を返す関数が
あったとします。

LPVOID pbuf;
func((LPVOID*)&pbuf);//戻り値は無視する。

このように使えばその後で
wsprintf(buf, "%d", *(DWORD*)pbuf);
のようにして4バイトの値を得ることができました。

そこで、LPVOID pbuf;と宣言していたものを、LPDWORD pbuf;
とだけ変更してもうまくいきました。
DWORD *pbuf;とだけ変更した場合もうまくいきました。
DWORD pbuf[1];とだけ変更した場合もうまくいくと思ったのですが、
wsprintf(buf, "%d", *(DWORD*)pbuf);の結果が他の宣言の場合と
異なり、予想外だったのです。

func関数にはメモリの実体のポインタのポインタを指定すれば
いいようなんですが、なぜDWORD pbuf[1];とするとうまくいかなかった
のでしょうか?