结构体指针变量

C语言提供了基础数据类型,例如char、int等数据类型,可以定义指针变量。那么,结构体类型是用户自己定义的数据类型,同样也可以定义指针变量。结构体类型定义指针变量格式如下:

struct 结构体类型名* 指针变量名;

定义指针变量的格式与基本数据类型定义指针变量格式一样。例如前面定义的读者结构体类型struct reader,可以定义指针变量如下:

struct reader* pr;

此时pr变量是一个指针变量,指向struct reader类型的变量。指针可以存放一个变量的地址,所以,pr变量可以存放一个struct reader类型变量的地址。例如:

struct reader r1; //定义结构体类型变量r1;

struct reader* pr = &r1; //定义指针变量pr存放r1变量的地址,就是指向r1变量

学习了指针的知识之后,我们可以使用指针降级运算符“*”对指针变量进行操作,把指针转换为指针所指向的对象。例如:

struct reader r2 = *pr;

此时,由于pr指向变量r1,那么,使用指针降级运算符“*”对其进行降级之后,转换为pr指针变量所指向的r1变量。那么,等价于:

struct reader r2 = r1;

就是把r1变量的数据赋给r2变量。在学习“访问结构体的成员”章节中,我们介绍了结构体变量访问其成员的方式,有如下两种方式:

(1) 结构体变量名.成员名

(2) 结构体指针变量名->成员名

那么,如果指针变量是一级指针,使用指针降级运算符“*”对指针进行降级,转换为指针所指向的结构体变量,那么,就可以以结构体变量的形式访问成员,例如:

(*指针变量).成员名。

程序测试例子如下:

c语言结构体里的变量默认值(如何定义结构体指针变量)(1)

程序运行结果如下:

c语言结构体里的变量默认值(如何定义结构体指针变量)(2)

可以看到,我们定义了指针变量pr,并设置它指向变量r1。然后,可以通过指针降级运算符“*”对指针变量pr进行操作,访问它所指向的变量。同时,可以使用指针操作符“->”直接通过指针变量访问其所指向变量的成员。

所以,结构体类型指针变量访问其成员的方式,可以总结如下:

(1) 结构体变量.成员名;

(2) 结构体指针变量->成员名;

(3) (*结构体指针变量).成员名;

注意,对于第三种方式,就是通过指针降级运算符“*”对指针变量进行降级,转换为指针变量所指向的变量。如果指针变量是一级指针,降级之后,转换为结构体变量,所以,可以以结构体变量的方式访问成员。

如果是二级指针变量,需要2个指针降级运算符“*”进行降级,转换为结构体变量才可以。程序测试例子如下:

c语言结构体里的变量默认值(如何定义结构体指针变量)(3)

程序运行结果如下:

c语言结构体里的变量默认值(如何定义结构体指针变量)(4)

可以看到,对于指针变量的操作,可以是使用指针降级运算符“*”对指针变量进行降级操作。降级指针,转换为指针变量所指向的变量。

,