#include <stdio.h> int main() { struct information{ //创建结构体来存储学生的信息 int number; float C; float math; float english; }student,*p=&student; //定义变量student并用指针p在指向 scanf("%d;%f,%f,%f",&(*p).number,&p->C,&student.math,&p->english); printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",p->number,p->C,p->math,p->english); return 0; }
&(*p).number // 表示获取指针 p
所指向的结构体变量的 number
成员的地址。 注意输入先将指针解引用再取地址
&p->C // (*p).num=p->num
&student.math // 表示结构体变量的math成员的地址
以上三者等价
`&(*p).number` 表示获取指针 `p` 所指向的结构体变量的 `number` 成员的地址。
在C语言中,使用 `.` 运算符来访问结构体变量的成员,而使用 `->` 运算符来访问结构体指针所指向的结构体变量的成员。
因此,`p.number` 是错误的写法,应该使用 `p->number` 来访问结构体指针 `p` 所指向的结构体变量的 `number` 成员。
另外,`&` 运算符用于获取变量的地址,所以 `&(*p).number` 表示获取 `(*p).number` 的地址,即 `p` 所指向的结构体变量的 `number` 成员的地址。
#include <stdio.h> struct student { int number; }; int main() { struct student s; // 定义结构体变量 struct student *p = &s; // 定义指向结构体的指针,并将其指向结构体变量 printf("Please input the student number: "); scanf("%d", &p->number); // 通过指针访问结构体成员,并将输入的值存储到成员中 printf("The student number is: %d\n", p->number); return 0; }