# include <stdio.h> # include <string.h> struct AGE { int year; int month; int day; }; struct STUDENT { char name[20]; //姓名 int num; //学号 struct AGE birthday; //生日 float score; //分数 }; int main(void) { struct STUDENT student1; /*用struct STUDENT结构体类型定义结构体变量student1*/ struct STUDENT *p = NULL; /*定义一个指向struct STUDENT结构体类型的指针变量p*/ p = &student1; /*p指向结构体变量student1的首地址, 即第一个成员的地址*/ strcpy((*p).name, "小明"); //(*p).name等价于student1.name (*p).birthday.year = 1989; (*p).birthday.month = 3; (*p).birthday.day = 29; (*p).num = 1207041; (*p).score = 100; printf("name : %s\n", (*p).name); //(*p).name不能写成p printf("birthday : %d-%d-%d\n", (*p).birthday.year, (*p).birthday.month, (*p).birthday.day); printf("num : %d\n", (*p).num); printf("score : %.1f\n", (*p).score); return 0; }输出结果是:
(*指针变量名).成员名
注意,*p 两边的括号不可省略,因为成员运算符“.”的优先级高于指针运算符“*”,所以如果 *p 两边的括号省略的话,那么 *p.num 就等价于 *(p.num) 了。(*指针变量名).成员名
可以直接用:指针变量名->成员名
来代替,它们是等价的。“->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高。p->num 的含义是:指针变量 p 所指向的结构体变量中的 num 成员。p->num 最终代表的就是 num 这个成员中的内容。# include <stdio.h> # include <string.h> struct AGE { int year; int month; int day; }; struct STUDENT { char name[20]; //姓名 int num; //学号 struct AGE birthday; /*用struct AGE结构体类型定义结构体变量birthday, 生日*/ float score; //分数 }; int main(void) { struct STUDENT student1; /*用struct STUDENT结构体类型定义结构体变量student1*/ struct STUDENT *p = NULL; /*定义struct STUDENT结构体类型的指针变量p*/ p = &student1; /*p指向结构体变量student1的首地址, 即第一项的地址*/ strcpy(p->name, "小明"); p->birthday.year = 1989; p->birthday.month = 3; p->birthday.day = 29; p->num = 1207041; p->score = 100; printf("name : %s\n", p->name); //p->name不能写成p printf("birthday : %d-%d-%d\n", p->birthday.year, p->birthday.month, p->birthday.day); printf("num : %d\n", p->num); printf("score : %.1f\n", p->score); return 0; }输出结果是:
# include <stdio.h> struct STU { char name[20]; int age; char sex; char num[20]; }; int main(void) { struct STU stu[5] = {{"小红", 22, 'F', "Z1207031"}, {"小明", 21, 'M', "Z1207035"}, {"小七", 23, 'F', "Z1207022"}}; struct STU *p = stu; return 0; }此时指针变量 p 就指向了结构体数组的第一个元素,即指向 stu[0]。我们知道,当一个指针指向一个数组后,指针就可以通过移动的方式指向数组的其他元素。
# include <stdio.h> struct STU { char name[20]; int age; char sex; char num[20]; }; int main(void) { struct STU stu[3] = {{"小红", 22, 'F', "Z1207031"}, {"小明", 21, 'M', "Z1207035"}, {"小七", 23, 'F', "Z1207022"}}; struct STU *p = stu; for (; p<stu+3; ++p) { printf("name:%s; age:%d; sex:%c; num:%s\n", p->name, p->age, p->sex, p->num); } return 0; }输出结果是:
# include <stdio.h> struct STU { char name[20]; int age; char sex; char num[20]; }; int main(void) { struct STU stu[3] = {{"小红", 22, 'F', "Z1207031"}, {"小明", 21, 'M', "Z1207035"}, {"小七", 23, 'F', "Z1207022"}}; struct STU *p = stu; int i = 0; for (; i<3; ++i) { printf("name:%s; age:%d; sex:%c; num:%s\n", p[i].name, p[i].age, p[i].sex, p[i].num); } return 0; }输出结果是:
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有