如何使用指针算术访问结构数组?
假设我有一个结构
struct point{
int x;
int y;
}collection[100];
假设我有一个函数
int func(struct point *collection,int size)
在此函数内,我访问该元素,如下所示。
collection[0].x
这与*(collection + 0).x
相同吗?由于 .
运算符的优先级高于 *
运算符,因此首先将集合指针递增 0,然后应用点运算符,然后取消引用指针?不知何故,这没有意义;任何澄清表示赞赏。
最佳答案
Is this the same as
*(collection + 0).x
?
没有。您的解释绝对正确, .
的优先级高于 *
,因此第二个表达式被解析为 *((collection + 0).x)
。另一方面,collection[i].x
相当于 (*(collection + i)).x
。
实际上这种尴尬是引入 ->
运算符的原因,因此假设 y
是一些不平凡的表达式,您可以编写
y->x
而不是
(*(y)).x
尽管在这个特定实例中显然 collection[0].x
比 (collection + 0)->x
干净得多。
关于c - 结构体数组和指针算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21544177/