如何从指向结构体指针的指针数组中获取结构体成员值?
问题分析与解决方案
先明确你的代码里的核心类型匹配问题:
- 你声明的数组
struct Game **arr[MAX_NUM],每个元素是指向结构体指针的二级指针。 - 赋值时
arr[counter] = &new_game,其中new_game是struct game *类型,所以&new_game是二级指针,和数组元素类型匹配,但访问成员时必须注意指针层级。
你尝试用 arr[counter]->publisher 访问成员报错,是因为 arr[counter] 是二级指针(struct game **),而 -> 运算符仅适用于指向结构体/联合体的一级指针。必须先解引用二级指针得到一级指针,才能访问结构体成员。
正确的访问写法
两种等价的合法写法:
- 用解引用运算符
*先获取一级指针,再用->访问成员:
printf("%s", (*arr[counter])->publisher);
- 用数组下标语法替代解引用(
*p等价于p[0]):
printf("%s", arr[counter][0]->publisher);
额外的潜在问题
你的结构体定义写法有误:
struct game { // ...成员定义... } Game;
这行代码是声明了一个名为Game的struct game类型变量,而非将Game设为struct game的类型别名。如果想让 struct Game 成为合法类型,应该用typedef修正:
typedef struct game { // ...成员定义... } Game;
否则你后续的 struct Game **arr[MAX_NUM] 其实是非法的,因为不存在 struct Game 这个类型,只有 struct game 和变量Game。
内容的提问来源于stack exchange,提问作者Khanh Bui
相关产品推荐
相关产品推荐

