2014-01-28 35 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