处理C结构数组时,是(*(data + i)).成员与data [i] .member相同?

0 c arrays struct pointers

我是处理结构的新手,特别是结构阵列.

我想知道这是否正确.

(*(data+i)).member == data[i].member  ?      
Run Code Online (Sandbox Code Playgroud)

Ada*_*eld 5

是的,两者保证是等价的.特别是,C语言标准data[i]根据指针算法定义数组下标- data[i]相当于*(data + i) 定义.

从C99§6.5.2.1/ 2:

后缀表达式后跟方括号中的表达式[]是数组对象元素的下标名称.下标操作符的定义[]E1[E2]相同(*((E1)+(E2))).由于适用于二元+运算符的转换规则,if E1是一个数组对象(等效地,指向数组对象的初始元素的指针)并且E2是一个整数,因此E1[E2]指定E2-th元素E1(从零开始计数).

请注意,由于二元+运算符是可交换的,这意味着它a[b]等效于b[a],即使它b是一个整数并且a是指针或数组,因此表达式4["a character array"]是合法且定义良好的.

这就是说,写作*(data + i)通常认为是不好的风格(4["a character array"]几乎总是被认为是不好的风格,除非你想赢得国际C语言混乱代码大赛).除非你有充分的理由,否则只需写下data[i]并完成它.