c - 结构中的数组和访问方法

标签 c arrays pointers struct

看起来像一些基本的东西。 但我不明白为什么

(*ptr).my_data_ptr->my_data[0].b 

有效,而

*((*ptr).my_data_ptr).my_data[0].b 

没有。

我给出了以下各种数据类型之间的关系:

typedef struct { int a; int b;} MY_DATA;
typedef struct { MY_DATA my_data[2];} MY_DATA_ARR;
typedef struct { MY_DATA_ARR *my_data_ptr;} MY_PARAM;
typedef MY_PARAM * MY_PARAM_PTR;

最佳答案

这是因为a->b等价于(*a).b不是 *a.b。引用C Operator Precedence , 成员访问的优先级 . 高于解引用 *.

对此进行更改 - 它会起作用:

(*((*ptr).my_data_ptr)).my_data[0].b 

关于c - 结构中的数组和访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48987165/

相关文章:

带有 char** 参数的 C++ 函数

pointers - 如何使用指向该 slice 的指针获取 slice 项

c - 为什么我的程序可以编译但没有执行任何操作?

java - 空虚是什么意思?

c - 在 C 中写入文件时减少磁盘访问次数

c - 在 C 中查找短数组的所有可能子集

javascript - 查找所有数组中的最小公共(public)数

Javascript - 将数组解构为对象

数组可以称为 const 指针吗?

python - ctypes中的循环结构,python