2014-01-28 39 views
3

這條語句在C語言中的含義是什麼?結構指針及其用法

其中fag是結構,其指針是pat

fag *pat = &h.device[d]; 
d = (pat - &(h.device[0]))/(sizeof(fag)) ; 
+1

第二個陳述是無用的,並且可能被優化爲'd = d;'因此被刪除(假設'h.device [0]'的類型是'fag' ....) –

+0

yes ..對..但是第一個陳述的含義是什麼?你能清楚地解釋我嗎? – Fagun

回答

4
fag *pat = &h.device[d]; 

取所述數組的第d個元素的地址。

它可以用來緩解對它的訪問。

如果我做

d = (pat - &(h.device[0]))/(sizeof(fag)); 

在那裏我沒有訪問原始d,我得到了給定項的指數,所述陣列英寸

它從「我們」指針到原始指針的差異。

如果我看到它的權利,除以sizeof fag是錯誤的 - 差異已經在fag大小的條款。此外,&(h.device[0])是完全一樣h.device,所以

d = pat - h.device; 

應該是正確的事情。 (Thank you, WhozCraig.

+1

你在第二個片段中使用'sizeof()'的時候非常正確。它不應該在那裏,並在答案+1。它對我來說更簡單,只需使用'd =(pat-h.device)'這樣的東西,但是我意識到指針型純化論者有問題,我承認這是有保證的。我似乎無法在我之外使用C-ism。 – WhozCraig

+0

@ glglgl謝謝!但是在fag尺寸方面有什麼不同? – Fagun

+0

@WhozCraig你對這個簡單的語法。爲什麼會有問題? – glglgl

0

一個可能用途結構指針的可能是,如果你想改變一個結構的成員函數中,你必須通過結構的地址。

+0

但我認爲,情況並非如此! – Fagun