当一个指针变量指向结构体时,我们就称它为结构体指针。
获取结构体成员的方式有以下两种: - (*pointer).memberName - pointer->memberName
第一种写法中,.的优先级高于,(pointer)两边的括号不能少。如果去掉括号写作pointer.memberName,那么就等效于(pointer.memberName),这样意义就完全不对了。
第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。上面的两种写法是等效的。
实例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SCORE_LEN 5
#define SCHOOL_LEN 50
typedef struct {
char* name;
int age;
int score[SCORE_LEN];
char school[SCHOOL_LEN];
} Students;
int main() {
Students s;
Students* pt;
s.name = "张三";
s.age = 18;
int arr[]={76,80,77,84,90};
memcpy(s.score,arr,sizeof(int)*SCORE_LEN);
strcpy(s.school,"西安电子科技大学");
printf("姓名:%s\n",s.name);
printf("年龄:%d\n",s.age);
printf("------考试分数------\n");
for(int i=0;i<SCORE_LEN;i++){
printf("%d ",s.score[i]);
}
printf("\n学校:%s\n",s.school);
printf("\n----------------\n");
pt = &s;
printf("姓名:%s\n",pt->name);
printf("年龄:%d\n",pt->age);
printf("------考试分数------\n");
for(int i=0;i<SCORE_LEN;i++){
printf("%d ",pt->score[i]);
}
printf("\n学校:%s\n",pt->school);
printf("\n----------------\n");
printf("姓名:%s\n",(*pt).name);
printf("年龄:%d\n",(*pt).age);
printf("------考试分数------\n");
for(int i=0;i<SCORE_LEN;i++){
printf("%d ",(*pt).score[i]);
}
printf("\n学校:%s\n",(*pt).school);
return 0;
}
运行结果:
