C语言结构体指针访问成员的正确方法
03. 有以下说明和定义语句:
struct student{
int age;
char num[8];
};
struct student stu[3] = {{20, '001'}, {21, '002'}, {19, '003'}};
struct student *p = stu;
以下选项中引用结构体变量成员的表达式错误的是____。
(A) stu[3].age (B) (*p).num (C) (p++)->num (D) p->num
**为什么其中 p=stu; 后能直接用 p->num p 和 p 什么关系
答案是 A。
选项 A 中的表达式应该是 stu[2].age,因为数组下标从 0 开始计数。
*p 和 p 指的是指针和指针变量的关系,p 指向结构体数组第一个元素的指针变量,而 *p 指向该元素本身。因此,*p=stu; 语句将 p 指向结构体数组的第一个元素,即 stu[0],使得 p->num 等价于 stu[0].num。
总结:
stu[3].age错误,因为数组下标从 0 开始,stu[3]超出数组范围。*p = stu;将指针 p 指向结构体数组的第一个元素stu[0]。p->num等价于stu[0].num,因为p指向stu[0]。
相关知识点:
- 结构体指针
- 指针运算
- 数组下标访问
- 指针访问结构体成员
原文地址: https://www.cveoy.top/t/topic/nXqZ 著作权归作者所有。请勿转载和采集!