C语言结构体指针

C语言结构体指针教程

C 语言 中,指针 可以存放任意的 数据类型 的地址,比如 intlongdobule,也可以存放 结构体 的地址,存放结构体地址的指针,我们称为结构体指针。

C语言结构体指针

语法

struct structName *pArrName;

说明

我们定义了一个结构体指针 pArrName,该指针存放的是结构体 structName 的地址。

C语言访问结构体指针成员

语法

pArrName->fileld;

参数

参数 描述
pArrName 结构体指针名。
fileld 需要访问的成员。

说明

如果是结构体指针,要访问其成员,那么我们不再是使用点,而是使用 ->

C语言访问结构体指针成员

语法

(*pArrName).fileld;

参数

参数 描述
pArrName 结构体指针名。
fileld 需要访问的成员。

说明

如果我们使用 * 的方式,访问结构体成员,那么我们必须要使用 () 改变 运算符的优先级,否则,会出错。

案例

C语言结构体指针

C 语言结构体指针定义与使用

#include <stdio.h> struct Student{ char *name; float score; }; void main() { printf("嗨客网(www.haicoder.net)\n\n"); struct Student student = {"HaiCoder", 100}; struct Student *pStu = &student; printf("Stu name = %s, score = %f\n", pStu->name, pStu->score); printf("\n"); return 0; }

程序运行后,控制台输出如下图所示:

11_C语言结构体指针.png

我们首先,定义了一个结构体 Student,该结构体有两个成员,即一个 字符串 类型的 name 和一个 float 类型 的 score。

接着,我们定义了一个结构体类型变量 student 并初始化,同时,我们定义了一个结构体指针 pStu,其指向了 student 结构体。

最后,我们使用 printf 打印了结构体指针中的成员,这里,我们使用的是 ->,而不是点。

C语言结构体指针

C 语言结构体指针定义与使用

#include <stdio.h> struct Student{ char *name; float score; }; void main() { printf("嗨客网(www.haicoder.net)\n\n"); struct Student student = {"HaiCoder", 100}; struct Student *pStu = &student; printf("Stu name = %s, score = %f\n", (*pStu).name, (*pStu).score); printf("\n"); return 0; }

程序运行后,控制台输出如下图所示:

12_C语言结构体指针.png

这次,我们使用了 * 的方式,来访问了结构体的成员,这里,我们必须使用 () 改变运算符的优先级。

C语言结构体指针总结

在 C 语言中,指针可以存放任意的数据类型的地址,比如 int、long、dobule,也可以存放结构体的地址,存放结构体地址的指针,我们称为结构体指针。