惧留孙网

juliusun.com

在线教程 > C语言教程 > 结构体指针及数组

结构体指针及数组

第 36/50 节 冥河C语言教程


结构体指针根据我们以前的指针定义方式,可以推测出来,定义格式为:

struct 结构体类型名 * 结构体指针名

结构体指针引用指向的内容也可以推测出来,用法为

(* 指针名).成员名

上一节 例子,假设有代码:


  1. struct Book * p; //定义结构体指针

那么设置指针指向的价钱代码如下:


  1. (*p).price = 21.5; //使用指针访问成员

指针指向成员引用"(* 指针名).成员名",例子中的(*p).price为什么要将*p用小括号()括起来?

根据 C语言运算符优先级表,点.运算符优先级大于星号运算符,所以*p.price同*(p.price)。这显然是错误的写法,p是指针,不能与点运算符放在一起。因为需要加小括号将星号*和指针变量p括起来。

C语言还允许使用另一种方法引用结构体指针指向的成员,就是指向运算符->。小减号和大于号组成,用法是:

指针名 -> 成员名

意义与:

(* 指针名).成员名

相同,两种写法喜欢写哪种都行,不影响代码编译执行。

指向运算符->是本节重点。

结构体数组的定义没什么好说的,大家可以很容易推测出来,格式如下:

struct 结构体类型名 结构体数组名[元素个数]

引用数组元素格式如下:

结构体数组名[下标]

引用数组元素成员格式如下:

结构体数组名[下标].成员名

都是常规用法,不再举例。

适用于基础变量的指针和数组名混合用法,也适用于结构体。

举一个结构体数组和指针的例子,输出几本书的信息。代码如下:


  1. #include<stdio.h>
  2. struct Book //定义一个关于书的结构体类型
  3. {
  4. char name[20]; //书名
  5. float price; //价钱
  6. int store; //库存
  7. char author[30]; //作者
  8. };
  9. /*类型可以定义在全局或任意一个语句块,考虑到实际开发中需要有多个函数同时引用此类型,
  10. 定义在全局变量比较合适。只有某一函数使用,定义在函数语句块即可*/
  11. int main( )
  12. {
  13. struct Book books[3] = {{"C Program",21.5,100,"Zhang San"},{"History",18,25,"Li Si"},
  14. {"language",21.5,100,"Wang Wu"}},*p = books;
  15. while(p <= &(books[2]) ) //对比数组最后一个元素地址,判断数组是否结束。或p<=(books+2)、p<(books+3)
  16. {
  17. printf("书名:%s\n价钱:%f\n库存:%d\n作者:%s\n\n", p->name , p->price , p->store , p->author);//应用指向运算符->
  18. ++p;
  19. }
  20. getchar( ) ; //使程序暂停一下
  21. return 0;
  22. }

效果图类似如下:

Pic

作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的