c - 结构体数组和指针算术

标签 c arrays pointers structure

如何使用指针算术访问结构数组?

假设我有一个结构

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/

相关文章:

c - 为什么 wcwidth 返回 -1 并带有我可以在终端上打印的标志?

c - 为什么 C 中的复合文字是可修改的

c - 使用循环从数组中的元素中查找累积和?

c++ - 将 C++ 函数转换为 Delphi : what to do with void* parameter?

c++ - 我们如何以恒定复杂度或 O(1) 交换 2 个数组?

c++ - 以编程方式更改桌面背景

c++ - 源文件和头文件

java - 如何将字符串放入二维数组中

arrays - 通过旋转和反向操作进行数组置换

c++ - 使用 std::set of pointers 时出现段错误...谁能解释一下?