在C语言中结构体通常用来将不同类型的变量打包在一起,方便对对象的统一管理。

结构体定义

  要使用结构体时,首先要进行结构体的声明。声明的形式如下:

 struct 结构体名{ 结构体所包含的变量};

  比如现在要描述一本书的标题,作者,价格。声明格式如下:

struct book{char title[30];char author[30];float value;};

  用字符数组来存储书的标题和作者,用浮点型来存储书的价格。声明完成之后,此时在内存中并没有分配存储空间。因为结构体也是一种数据类型,它和char、int、float等类型一样属于数据类型。

  声明完结构体之后,就告诉了计算机,我要使用的数据类型是结构体类型。在后面操作这个对象的时候,就按照结构体的方式来操作。此时就相当于只写了一个 int ,并没有定义变量。

  下面开始定义结构变量。

struct book b1;

  此时就在内存中创建了一个结构类型的变量b1,系统就会在内存中给b1分配一个存储空间。

  在上面将结构体的声明和变量的定义分成了两部分,也可以使用一起实现。

struct book{char title[30];char author[30];float value;} b1;

  用这种方式就可以声明一个结构类型,同时定义了一个结构变量b1。如果还想在定义一个变量b2,可以在初始化的时候定义。也可以单独定义。

  单独定义:

struct book b2;

  在声明的时候时候定义

struct book{char title[30];char author[30];float value;} b1,b2;

  如果这个结构体不需要再定义其他的变量,那么在声明时可以省略结构体名,比如上面的代码就可以简写为:

struct {char title[30];char author[30];float value;} b1,b2;

  将结构体名book直接省略掉,但是这样的话,以后如果再想单独定义一个变量b3就不能实现了。

结构体初始化

方法一:

  初始化上面定义的两个变量,在定义的时候直接初始化。

   struct book{char title[30];char author[30];float value;};struct book b1 = {"语文","张三",19.8};struct book b2 = {"数学","李四",21.3};

  初始化的时候,各个项之间用逗号隔开,按照定义时的顺序,依次填入各个成员的值。

方法二:

  可以每个成员单独初始化

struct book{char *title;char *author;float value;} b1,b2;b1.value = 19.8;b1.title = "语文";b1.author = "张三";b2.title = "数学";b2.value = 21.3;b2.author = "李四";

  定义好变量之后,给每个成员单独初始化,初始化的时候可以不按照顺序来。在单独初始化的时候,这里要注意一下,需要将结构体声明中的的字符数组改为指针。如果还是用字符数组,那么在给数组赋值的时候,只能使用下标,一位一位的给数组中每个元素赋值。而不能将数组定义好之后,然后给数组的首地址一个字符串。字符数组只有在定义的时候,可以直接用字符串赋值。如下所示:

    char str[30] = "123";  //正确char str1[30];str1 = "abc";         //错误

  如果需要给成员单独初始化,就需要将申明中的数组改为指针,如果不想修改的话,那么也可以在定义的时候,直接初始化。

方法三:

  在初始化的时候,可以直接使用结构成员运算符—点(.)访问结构体中的成员。这样的话就可以直接指定要向哪个成员赋值。可以不按照顺序来对成员进行赋值。

struct book{char title[30];char author[30];float value;} ;struct book b1={.value = 19.8,.title = "语文",.author = "张三"};struct book b2={.title = "数学",.value = 21.3,.author = "李四"};

  在操作结构体中的对象时,也可以使用点来访问。比如需要打印结构成员的信息时,可以使用下面 的代码:

 printf("%s %s %f\r\n",b1.author,b1.title,b1.value);printf("%s %s %f\r\n",b2.author,b2.title,b2.value);


  在结构体变量后加一个点就可以直接访问变量中的具体成员。成员的操作方法和它对应的类型操作方法一样。

C语言学习笔记---结构体的定义和初始化相关推荐

  1. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  2. C语言学习笔记---结构体中的字符数组和字符指针

      在结构体中可以使用字符数组来存储字符串,也可以使用字符指针来存储字符串.比如: struct str{char s1[5];char s2[5];};struct str str1= {" ...

  3. C语言学习笔记---结构体作为函数参数和返回值

      结构体不仅可以作为函数的参数传递,也可以作为函数的返回值.现在就分别来看一下这两种情况. 结构体作为参数 struct score {int chinese;int math;int englis ...

  4. C语言学习笔记---结构体指针

      既然结构体是一种数据类型,那么除了使用变量本身来访问结构体之外,也可以使用指针来访问结构体.下面通过一个简单的例子来演示一下: struct Date{int year;int month;int ...

  5. C语言学习笔记---结构体数组初始化

      既然结构体是一种数据类型,那么它也可以定义为数组的形式.比如要描述一本书的信息,可以将书的名称,作者,价格这些信息用一个结构体来描述,在使用的过程中不可能只描述一本书,所以就需要使用一个结构体数组 ...

  6. Go语言学习笔记——结构体中使用tag标记

    文章目录 golang结构体中使用tag标记 简介 语法结构 快速入门 常见应用 应用json编码 应用xml编码 应用form表单绑定 gin框架form和数据绑定 golang结构体中使用tag标 ...

  7. c++结构体定义和使用_【C语言更新】结构体的定义及使用

    文/Edward首先先思考一个问题,假设某一天你去了一家策划公司,接到了一个策划需求,比如为新上市的某款手机写一个市场推广的文案,并且在电脑上面打印出来.那么在写这个文案的时候,你肯定是会需要着重地去 ...

  8. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  9. Go语言学习、结构体

    最近疫情比较严重,过年也不能出门,闲来无事,继续更新博客吧. 武汉加油! 我们来继续说下go语言中的结构体 比如我们现在想存储一个学生信息,如:学号.姓名.年龄.性别,等信息,按照我们以前的存储习惯, ...

最新文章

  1. 网页设计过程中一般命名规则
  2. 一个类怎样引用另外一个类的成员变量或方法
  3. 【学习笔记】人类为什么最终选择了芯片
  4. pythoncsv数据怎么读_python如何读写csv数据
  5. python画完图 程序暂停运行_Python编程:认识IDLE,编写保存运行第1个程序
  6. 五大常用经典算法—回溯算法
  7. 工厂模式---设计模式(二)
  8. DES加密解密算法(前端后端)
  9. Android大环境杂谈待续中
  10. 【Python】shuffle函数
  11. 基于比较的排序算法集
  12. java 占位符_Java重要知识点
  13. 【人民币识别】基于matlab GUI人民币序列号识别【含Matlab源码 908期】
  14. “时间复杂度”的另类解释
  15. 什么是运行时应用程序自我保护(RASP)Runtime Application Self-Protection
  16. 和计算机相关的英文名字女孩,简单好听寓意好的英文名字女孩
  17. 前端面试题及解答(尽量口语化,模拟面试现场时的回答)
  18. MAC微信接收到的文档打开都变成(只读)解决办法
  19. 纯正国内的海盗王3.0修复端
  20. 柳传志:联想发展过程中的三大突破

热门文章

  1. 持久化数据结构(笔记)
  2. 【转】ASP.NET ViewState详解
  3. 大数据分析与云技术结合
  4. UISegmentedControl UISlider
  5. ×××须避开的高薪杀手
  6. Mybatis Generator 逆向生成器
  7. 【Linux】服务管理命令和压缩管理的详细解读
  8. 对软件测试“核心价值”的思考
  9. 如何做好Web 安全测试
  10. php代码输出sql语句,教你在Laravel中轻松容易的输出完整的SQL语句