我是处理结构的新手,特别是结构阵列.
我想知道这是否正确.
(*(data+i)).member == data[i].member ?
Run Code Online (Sandbox Code Playgroud)
是的,两者保证是等价的.特别是,C语言标准data[i]根据指针算法定义数组下标- data[i]相当于*(data + i) 定义.
从C99§6.5.2.1/ 2:
后缀表达式后跟方括号中的表达式
[]是数组对象元素的下标名称.下标操作符的定义[]是E1[E2]相同(*((E1)+(E2))).由于适用于二元+运算符的转换规则,ifE1是一个数组对象(等效地,指向数组对象的初始元素的指针)并且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]并完成它.