如何访问结构体指针的结构体指针成员
1、该种方法用指针指向一个结构体,使用时p->成员名。
struct Student p;
struct Student stu1={001,“zb”,90.5};
p=&stu1;
printf(“学号\t姓名\t分数\n”);
printf("%d\t%s\t%0.1f\n",p->num,p->name,p->score);*/
2、该种方法是定义一个指针变量,只指向一个struct Student的结构体
struct Student* p;
struct Student stu={001,"zhao",90.5};
p=&stu;
printf("学号\t姓名\t分数\n");
printf("%d\t%s\t%0.1f\n",(*p).num,(*p).name,(*p).score);*/
扩展资料
指向结构体变量的指针
除了通过“结构体变量名.成员名”的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针。&student1 表示结构体变量 student1 的首地址,即 student1 第一个项的地址。如果定义一个指针变量 p 指向这个地址的话,p 就可以指向结构体变量 student1 中的任意一个成员。
用指针引用结构体变量成员的方式是:(*指针变量名).成员名
注意,*p 两边的括号不可省略,因为成员运算符“.”的优先级高于指针运算符“*”,所以如果 *p 两边的括号省略的话,那么 *p.num 就等价于 *(p.num) 了。
从该程序也可以看出:因为指针变量 p 指向的是结构体变量 student1 第一个成员的地址,即字符数组 name 的首地址,所以 p 和 (*p).name 是等价的。
但是,“等价”仅仅是说它们表示的是同一个内存单元的地址,但它们的类型是不同的。指针变量 p 是 struct STUDENT* 型的,而 (*p).name 是 char* 型的。所以在 strcpy 中不能将 (*p).name 改成 p。用 %s 进行输入或输出时,输入参数或输出参数也只能写成 (*p).name 而不能写成 p。
2023-08-15 广告
推荐于2017-11-27
从字面意思上看断句,有如下几种可能:
首先定义一个包含所有可能情况的结构体:
struct test
{
int a;
int *p;
};
struct test t1, *t2;
1 结构体/指针成员/所指向的变量。
结构体中有指针成员,然后要访问这个结构体成员指向的变量值。
那么可以*(t1.p)这种方式对p取值。
2 结构体指针/成员/所指向变量。
这种情况有两种方法可以访问:
*(t2->p)
或者
*(*(t2).p)
效果是一样的。
3 描述有误,实际为:
结构体指针所指向/成员变量。
同样有两种方法可以使用:
t2->p
或者
(*t2).p