C语言中建立数据类型-结构体指针-学习笔记-48

引入

我们知道,指针就是地址,那么结构体指针呢?其实就是指向结构体变量的起始地址,就是这个结构体变量的指针。相反的,如果吧结构体的起始地址存放在一个指针的,那么这个指针就指向该结构体变量。

定义

指向结构体对象的指针:
即可以指向结构体数组中的元素;
也可以指向结构体变量

1
2
struct Student *student_1;
// student_1 指向 struct Student 类型的变量或者数组元素

例子

通过指向结构体变量的指针变量,来输出结构体内各成员的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main(){
struct Student{
int num;
char name[20];
int score;
};
struct Student stu_1={1,"Bliner",99};
struct Student *stu_p;
stu_p=&stu_1;
printf("学号是:%d\n姓名是:%s\n成绩是:%d\n\n",stu_1.num,stu_1.name,stu_1.score);
printf("指针方式输出\n学号是:%d\n姓名是:%s\n成绩是:%d\n",(*stu_p).num,(*stu_p).name,(*stu_p).score);
}

执行结果

学号是:1
姓名是:Bliner
成绩是:99

指针方式输出
学号是:1
姓名是:Bliner
成绩是:99

我们从程序中看到:

指针指向的:stu_1 这个结构体变量的地址
sut_p加星号:(stu_p)表示的是 stu_1
调用成员:stu_1.name or (
stu_p ).name

要注意的是,因为.成员符号的优先级最高,如果不加括号

1
2
3
*stu_p.name;
//等价于
*(stu_p.name);

上面表示的不是 sut_p 指向的结构体变量的 name,而是 stu_p.name 这个指针后面的数据了。

小提示
C 语言为了方便阅读,允许吧
(*p).num 用 p->num 来代替,我们也把 -> 称为指向运算符。

1
2
3
4
//以下三者等价
stu_1.num; // 直接用结构体变量引用成员
(*p).num; // 用指向结构体变量的指针 p 来引用成员
p->num; //使用指向符,将指向结构体变量的指针 p 指向成员

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!