1

我知道以下两件事在c中是相同的(因为偏移量和数组)

someArray[i]     //ith element of someArray
*(someArray + i) //ith element of someArray

但是对于结构,相同的语法似乎并不能很好地支持......

someStruct[i]->*(someArray + j)   //compiler error
*(someStruct + i)->someArray[j]   //Also compiler error

无论如何使用指针/偏移符号(第二个)来表示结构的元素?

4

4 回答 4

5

假设someStruct是一个结构数组,并且someArray是数组类型的结构成员,那么其中任何一个都是有效的:

*(someStruct[i].someArray + j)

或者

(*(someStruct + i)).someArray[j]

参见例如http://ideone.com/UtLN2

于 2012-06-11T20:00:15.950 回答
1

除其他外,->当您可能应该使用成员引用运算符时,您正在使用指针解析运算符.

假设 someStruct[] 是一个结构数组(不是指针):

*(someStruct[i].someArray + j)
(*(someStruct + i)).someArray[j]
于 2012-06-11T20:02:12.113 回答
0

据我了解,我想您想通过一些指针/偏移算法来表示结构的字段

有一个标准宏,offsetof(type, field)其中产生结构或联合类型内stddef.h字段的偏移量。fieldtype

例如,假设s是 类型struct s*,并且f是 中的一个字段struct s。然后*(s + offsetof(struct s, f))是一样的s->f

于 2012-06-11T20:10:34.583 回答
0

这应该工作

*(someStruct[i]->someArray + j)

(*(someStruct + i))->someArray[j]

于 2012-06-12T09:28:07.943 回答