惧留孙网

juliusun.com

在线教程 > C语言教程 > 结构体

结构体

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


结构体可以由不同类型的多个成员组成。

数组也是由多个成员组成,不过数组内的所有成员都属于同种类型。当然,结构体成员也可以有同种类型。

稍有复杂的是,结构体定义分成两步:1、定义结构体类型;2、定义结构体变量

结构体类型定义格式如下:

struct 结构体类型名 { 类型 成员1;
类型 成员2;
……
类型 成员N;
};

注意定义结构体类型不要忘记后面的分号;,定义成员时不能设置成员值。成员赋值应该是定义结构体变量时的事,而不是定义结构体类型的时候。

例:


  1. struct Book //定义一个关于书的结构体类型
  2. {
  3. char name[20]; //书名
  4. float price; //价钱
  5. int store; //库存
  6. char author[30]; //作者
  7. };

结构体变量定义格式如下:

struct 结构体类型名 结构体变量名

目前很多编译器可以省略struct关键字,直接写成:结构体类型名 结构体变量名。

例:


  1. struct Book cprogram; //定义一个书的结构体变量cprogram

结构体变量可以在定义时赋值,也可以先定义后赋值。定义时赋值可以一次把所有成员全部赋值完毕。定义后赋值需要一个成员一个成员的赋值。

变量定义时赋值,用花括号{}括起成员,把成员按定义顺序依次给出,用逗号分隔。

例:


  1. struct Book cprogram = {"C Program",21.5,100,"Zhang San"}; //定义时赋值
  2. /*
  3. 按定义顺序可以推测:
  4. "C Program"对应char name[20]
  5. 21.5对应float price
  6. 100对应int store
  7. "Zhang San"对应char author[30]
  8. */

引用成员格式是结构体变量名后面跟点.运算符再接成员名,即:

结构体变量名 . 成员名

先定义后赋值,不能再用定义时初始化语法给所有成员赋值,需要依次给每个成员赋值。当然,如果某些成员不需要初始化,可以不对其赋值。

例:


  1. struct Book cprogram;
  2. strcpy(cprogram.name,"C Program");
  3. //字符数组定义后,不能用等号直接赋值。strcpy函数有复制字符串的功能。也可给数组每个元素赋值
  4. cprogram.price = 21.5;
  5. cprogram.store = 100;
  6. strcpy(cprogram.author,"Zhang San");

结构体类型和变量定义、初始化值也可以写在一起,很容易想到,格式应为:

struct 结构体类型名 { 类型 成员1; 类型 成员2; …… 类型 成员N; }结构体变量1={初始值1},结构体变量2={初始值2},……,结构体变量N={初始值N};

多数时候我们是分开写的,毕竟结构体变量一般不会一次性定义完,是通过不同情况动态定义的。

举个例子熟悉一下,用户输入书籍信息,然后程序输出用户输入的信息,代码例:


  1. #include<stdio.h>
  2. #include<string.h> //使用strcpy要使用这个头文件
  3. struct Book //定义一个关于书的结构体类型
  4. {
  5. char name[20]; //书名
  6. float price; //价钱
  7. int store; //库存
  8. char author[30]; //作者
  9. };
  10. /*类型可以定义在全局或任意一个语句块,考虑到实际开发中需要有多个函数同时引用此类型,
  11. 定义在全局变量比较合适。只有某一函数使用,定义在函数语句块即可*/
  12. int main( )
  13. {
  14. struct Book c; //定义一个结构体,考虑到代码简便性,变量名短一点
  15. strcpy(c.name,"C Program");
  16. printf("正在录入有关书籍 %s 的信息\n",c.name);
  17. puts("请输入作者:");
  18. gets(c.author);
  19. puts("请输入价钱:");
  20. scanf("%f",&c.price); //点.运算符优先级高于取地址符&所以写法等同&(c.price)
  21. puts("请输入库存:");
  22. scanf("%d",&c.store);
  23. printf("\n录入完毕\n书名:%s\n价钱:%f\n库存:%d\n作者:%s\n", c.name , c.price , c.store , c.author); //输出结构体成员
  24. getchar( ) ;getchar( ) ; //使程序暂停一下
  25. return 0;
  26. }

效果图类似如下:

Pic

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

京ICP备15039193号-1

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