c - 通过指针访问结构中的指针

标签 c pointers struct

因此,我在阅读邻接链表时​​一直在查看结构,并想到了一个想法。

How do I properly access a pointer in a struct using a pointer to the struct?

例如我有一个这样的结构声明:

typedef struct Sample{
    int x;
    int *y;
} Sample;

Sample test, *pter;  // Declare the struct and a pointer to it.
pter = &test;

所以现在我有一个指向结构的指针,我知道我可以像这样访问 int x 中的数据:pter->x 这与这个。但是,我在选择/弄清楚如何通过指针访问 *y 时遇到了麻烦。

我的一个 friend 说我应该这样做:*pter->y,但是我认为这样做更有意义:pter->*y。哪个是正确/唯一/适当/正确的方法?也许它们都可以工作?

最佳答案

对于 y 的值使用 pter->y,对于存储在 y 的值使用 *pter->y (相当于 *(pter->y) )。

备注:precedence -> 操作符高于 * 取消引用操作符,这就是为什么 *pter->y == *(pter->y )

编辑:根据评论。

表达式 pter-> *y 应该是一个语法错误,因为它不是一个有效的表达式,原因如下。

  1. 如果 * 被解释为一元取消引用运算符并应用于 y,则 y 是未知变量名(没有 pter)。
  2. 如果 * 被视为乘法运算符,则 -> 不能出现在 * 之前。

所以在这两种情况下编译都会产生错误。

关于c - 通过指针访问结构中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19335573/

相关文章:

c++ - 什么是安全的?从函数返回结构或指针

c++ - 聚合方法中的 sigsegv 错误

c - C 中的 struct ** 与 struct * 。取消引用和寻址运算符之间的混淆

c - 增长(和收缩)内存池

c - 这会导致内存泄漏吗?

C++ "destructive procedural variant"导致先前版本的二叉搜索树丢失

c - 结构指针总是被初始化为 nil

php - 使用 sizeof() 将代码从 C++ 移植到 PHP

c - 如何在 Linux 中从 C 执行 shell 脚本?

C:如何使 ArrayList 实现与 UNICODE_STRING 数据兼容?