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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录