C语言结构体指针的用法(非常详细)

分类: 亚洲版365betasia 时间: 2025-10-30 17:13:50 作者: admin 观测: 7336
C语言结构体指针的用法(非常详细)

在 C 语言程序中,一个指向变量的指针表示的是变量所占内存的起始地址。如果一个指针指向结构体变量,那么该指针指向的是结构体变量的起始地址。同样指针也可以指向结构体数组中的元素。

C语言结构体指针的定义

由于指针指向结构体变量的地址,因此可以使用指针来访问结构体中的成员。

定义结构体指针的一般形式如下:

结构体类型 *指针名;

例如,定义一个指向 struct telephone 结构体类型的 pStruct 指针变量,代码如下:

struct telephone *pStruct;

使用指向结构体变量的指针访问成员有两种方法,pStruct 为指向结构体变量的指针。

1) 第一种方法是使用“.”运算符引用结构成员,代码如下:

(*pStruct).成员名

结构体变量可以使用“.”运算符对其中的成员进行引用。*pStruct 表示指向的结构体变量,因此使用“.”运算符可以引用结构体中的成员变量。

注意,*pStruct 一定要使用括号进行标识,因为“.”运算符的优先级是最高的,如果不使用括号,就会先执行“.”运算然后才执行“*”运算。

例如,pStruct 指针指向 telephone 结构体变量,引用其中的成员,代码如下:

(*pStruct).price=3299;

声明书架结构体,为结构体定义变量并进行初始化赋值,然后使用指针指向该结构体变量,最后通过指针引用变量中的成员进行输出。

具体代码如下:

#define _CRT_SECURE_NO_WARNINGS

#include /*包含头文件*/

struct Book /*定义书架结构体*/

{

char cName[20]; /*书架类别*/

int iNumber; /*书架编号*/

char cS[20]; /*图书编号*/

}book={"electric",56,"134-467"}; /*对结构体变量初始化*/

int main() /*主函数main()*/

{

struct Book* pStruct; /*定义结构体类型的指针*/

pStruct=&book; /*指针指向结构体变量*/

printf("-----the bookcase's information-----\n"); /*提示信息*/

/*使用指针输出结构体成员*/

printf("书架类别: %s\n",(*pStruct).cName);

printf("书架编号: %d\n",(*pStruct).iNumber);

printf("图书编号: %s\n",(*pStruct).cS);

return 0; /*程序结束*/

}

运行程序,结果为:

-----the bookcase's information-----

书架类别: electric

书架编号: 56

图书编号: 134-467

首先在程序中声明结构类型,同时定义变量 book,对变量进行初始化的操作。定义结构体指针变量 pStruct,然后执行“pStruct=&book;”操作使指针指向 book 变量。

输出消息提示,然后在 printf() 函数中使用指向结构变量的指针引用成员变量,将书架的信息输出。

2) 第二种方法是使用“->”运算符引用结构成员,格式如下:

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

例如,使用“->”运算符引用一个变量的成员,代码如下:

pStruct->price=3299;

假如 telephone 为结构体变量,pStruct 为指向结构体变量的指针,以下 3 种形式的效果是等价的:

telephone.成员名;

(*pStruct).成员名;

pStruct->成员名;

在使用“->”引用成员时,要注意分析以下情况:

pStruct->price,表示指向结构体变量中成员 price 的值;

pStruct->price++,表示指向结构体变量中成员 price 的值,使用后该值加 1;

++pStruct-> price,表示指向结构体变量中成员 price 的值加 1,计算后再进行使用。

【实例】定义结构体变量但不对其进行初始化操作,使用指针指向结构体变量并对其成员进行赋值操作。具体代码如下:

#define _CRT_SECURE_NO_WARNINGS

#include /*包含头文件*/

#include

struct Sweat /*定义衣服结构体*/

{

char cName[20]; /*衣服种类*/

int iNumber; /*衣服价格*/

char cColor[20]; /*衣服颜色*/

}sweat; /*定义变量*/

int main() /*主函数main()*/

{

struct Sweat* pStruct; /*定义结构体类型的指针*/

pStruct=&sweat; /*指针指向结构体变量*/

strcpy(pStruct->cName,"毛呢外套"); /*为种类赋值*/

pStruct->iNumber=599; /*为价格赋值*/

strcpy(pStruct->cColor,"粉色"); /*为颜色赋值*/

printf("-----the sweat's information-----\n"); /*提示信息*/

printf("种类: %s\n",sweat.cName); /*输出结构体成员*/

printf("价格: %d元\n",sweat.iNumber);

printf("颜色: %s\n",sweat.cColor);

return 0; /*程序结束*/

}

运行程序,结果为:

-----the sweat's information-----

种类: 毛呢外套

价格: 599元

颜色: 粉色

程序中使用了 strcpy() 函数将一个字符串常量复制到成员变量中,使用该函数要在程序中包含头文件

在为成员赋值时,使用的是“->”运算符引用的成员变量,在程序的最后使用结构体变量和“.”运算符直接将成员的数据输出。输出的结果表示使用“->”运算符为成员变量赋值成功。

C语言结构体数组指针

结构体指针变量不但可以指向结构体变量,还可以指向结构体数组,此时指针变量的值就是该结构体数组的首地址。

结构体指针变量也可以直接指向结构体数组中的元素,这时指针变量的值就是该结构体数组元素的首地址。

例如,定义一个结构体数组 telephone[5],使用结构体指针指向该数组,代码如下:

struct telephone* pStruct;

pStruct=telephone1;

因为数组不使用索引时表示的是数组的第一个元素的地址,所以指针指向数组的首地址。如果想使指针指向第三个元素,则在数组名后附加索引,然后在数组名前使用取地址符号“&”,例如:

pStruct=&telephone1[2];

【实例】声明学生结构体类型并定义结构体数组,然后对其进行初始化操作。通过指向该数组的指针,将其中的元素数据进行输出。具体代码如下:

#define _CRT_SECURE_NO_WARNINGS

#include

struct Student /*定义学生结构体*/

{

char cName[20]; /*姓名*/

int iNumber; /*学号*/

char cSex; /*性别*/

int iGrade; /*年级*/

}student[5]={{"WangJiasheng",12062212,'M',3},

{"YuLongjiao",12062213,'W',3},

{"JiangXuehuan",12062214,'W',3},

{"ZhangMeng",12062215,'W',3},

{"HanLiang",12062216,'M',3}}; /*定义数组并设置初值*/

int main()

{

struct Student* pStruct;

int index;

pStruct=student;

for(index=0;index<5;index++,pStruct++)

{

printf("NO%d student:\n",index+1); /*首先输出学生的学号*/

/*使用变量index作为索引,输出数组中的元素*/

printf("Name: %s, Number: %d\n",pStruct->cName,pStruct->iNumber);

printf("Sex: %c, Grade: %d\n",pStruct->cSex,

pStruct->iGrade);

printf("\n"); /*换行*/

}

return 0;

}

运行程序,结果为:

NO1 student:

Name: WangJiasheng, Number: 12062212

Sex: M, Grade: 3

NO2 student:

Name: YuLongjiao, Number: 12062213

Sex: W, Grade: 3

NO3 student:

Name: JiangXuehuan, Number: 12062214

Sex: W, Grade: 3

NO4 student:

Name: ZhangMeng, Number: 12062215

Sex: W, Grade: 3

NO5 student:

Name: HanLiang, Number: 12062216

Sex: M, Grade: 3

从该实例代码和运行结果可以看出如下内容:

代码中定义了一个结构体数组 student[5],定义结构体指针变量 pStruct 指向该数组的首地址。使用 for 语句,对数组元素进行循环。

在循环语句块中,pStruct 刚开始时指向数组的首地址,也就是第一个元素的地址,因此 pStruct->引用的是第一个元素中的成员。使用输出函数输出成员变量表示的数据。

当一次循环结束之后,循环变量进行自加操作,同时 pStruct 也执行自加运算。这里需要注意的是,pStruct++ 表示 pStruct 自加的值为一个数组元素的大小,也就是说 pStruct++ 表示的是数组中的第二个元素 student[1]。

← 什么是螯合物 拼多多在哪查看买过的东西 手机/电脑端详细教程、订单查询与管理指南 →

相关时空节点

10月2日&10月3日9:00~17:30客服电话系统维护公告

10月2日&10月3日9:00~17:30客服电话系统维护公告

10-06 💫 323
在淘宝app开店一年需要交多少钱?

在淘宝app开店一年需要交多少钱?

10-20 💫 800
飞镖手法和发力技巧 飞镖怎么扔才准

飞镖手法和发力技巧 飞镖怎么扔才准

10-04 💫 550