2012-06-11 41 views
1

我知道下面的兩件事情是相同c的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 

有沒有辦法使用指針/偏移量表示法(第二個)來表示結構的元素?

回答

5

假設someStruct是結構的數組,並someArray是陣列類型的結構構件,然後任一這些是有效的:

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

參見例如http://ideone.com/UtLN2

1

在其他方面,正在使用的指針解析運算符->當你或許應該使用的構件的參考操作員.

假設someStruct []是結構(未指針)的數組:

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

根據我的理解,我想你想通過一些指針/偏移量算法來表示字段的結構。

有一個標準的宏,offsetof(type, field)stddef.h它產生的結構或聯盟類型type內的字段field的偏移量。

例如,假設sstruct s*類型,而fstruct s中的字段。然後*(s + offsetof(struct s, f))s->f相同。

0

這應該工作

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

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