以下内容是在b站上看的小甲鱼c语言时随着视频记录的代码

到底什么式结构体,怎么使用结构体?

以下面的代码为例子

# include <stdio.h>struct Book   //定义一个结构体的关键字struct  以及结构体的名称为Book注意通常首字母大写
{char title[128];    //我们这个函数是为了存放书的名称,作者,以及价格,版号char author[48];    //大括号内部是结构体成员float price;unsigned int date;char pulisher[48];}book;    //这是结构体变量的名称,类似于 int book  中的book是整形的变量名,这里的book是结构体类型,结构名为Book的变量book。这里就有一点绕了。void main(void)//主函数
{While(1);//暂时啥也不做}

另一个定义结构体的方法是

# include <stdio.h>struct Book   //定义一个结构体的关键字struct  以及结构体的名称为Book注意通常首字母大写
{char title[128];    //我们这个函数是为了存放书的名称,作者,以及价格,版号char author[48];float price;unsigned int date;char pulisher[48];};    //注意这里只定义了结构体的名称,而没有创建变量。void main(void)//主函数
{Struct Book book;//这里是创建了一个Book结构体类型的变量book}

接下来就是怎样访问结构体变量?
访问结构体的成员引入一个新的符号一个“点号”——“.”
比如book.title就是引用Book结构体的title成员,显然title成员是一个字符数组。
而book.price是引用Book结构体的price成员,而price是一个浮点型的变量。

接下来继续看程序

# include <stdio.h>struct Book
{char title[128];char author[48];float price;unsigned int date;char pulisher[48];}book;void main(void)
{printf("请输入书名 \n");scanf("%s",book.title);   //这里就涉及到赋值printf("请输入作者 \n");scanf("%s",book.author);printf("请输入售价 \n");scanf("%f",&book.price);printf("请输入出版日期 \n");scanf("%d",&book.date);printf("请输入出版社 \n");scanf("%s",book.pulisher);printf("************数据录入完毕************\n");printf("书名:%s\n",book.title);printf("作者:%s\n",book.author);printf("售价:%f\n",book.price);printf("出版日期:%d\n",book.date);printf("出版社:%s\n",book.pulisher);}

初始化结构体变量
初始化一个变量和一个数组

Int a = 520;
Int array[5]={1,2,3,4,5};初始化一个结构体变量
Struct Book book ={“小甲鱼带你飞”,  //注意用逗号分隔,另外注意一定要与定义的结构体成员类型对应起来
“小甲鱼”,
9.9,
20170707,
“清华”
};

初始化结构体的指定成员值
其语法与数组指定初始化元素类似,不过结构体指定初始化成员使用“点号”——“.”运算符和成员名
比如初始化book的price成员:

Struct Book book = {.price = 9.9};
还可以不按结构体声明的成员顺序进行初始化:
Struct Book book = {.publisher = “清华”,
.price = 9.9,
.date = 20170707
};

系统会对内存进行对齐操作

# include <stdio.h>void main (void){struct A{char a;int b;char c;}a = {'x',250,'c'};printf("size of a = %d \n",sizeof(a));}

理论上上述程序的x站一个字节,250占4个字节,c占一个字节
实际输出为12个字节
每个都按照4个字节处理的旧成了12个字节
如果改变输出的顺序x,o,250
则输出为8个字节
因为,前两个字符型都各占2个字节,但是系统自动补齐2个字节,总共占4个字节,而250本身就分配了4个字节。

结构体数组和结构体指针
结构体嵌套

# include <stdio.h>struct Date
{int year;int month;int day;
};struct Book
{char title[128];char author[48];float price;struct Date date;//结á构1体?的?嵌?套?char pulisher[48];}book = {"小甲鱼,"小甲鱼",9.9,{2017,1,11},"清华大学"
};
void main(void)
{printf("书名:\n",book.title);printf("作者:%s\n",book.author);printf("售价:%f\n",book.price);printf("出版日期:%d-%d-%d\n",book.date.year,book.date.month,book.date.day);   //注意一定要访问到最底层才可以printf("出版社:%s\n",book.pulisher);}

结构体数组
第一种:在声明结构体的时候进行定义
Struct 结构体名称
{
结构体成员;

}数组名[长度];

第二种:先声明一个结构体类型(比如上面的Book),再用此类型定义一个结构体数组。
Struct 结构体名称
{
结构体成员;

};
Struct 结构体名称 数组名[长度];

初始化结构体数组
Struct Book book[3] = {
{“<零基础>”,”小甲鱼”,9.9,{2017,11,7},”清华”},
{“入门”,”甲鱼”,9.9,{2017,10,1},”清华”},
{“到入土”,“鱼”,9.9,{2017,9,9},”清华”},
};

结构体指针
Struct Book * pt; //声明一个Book类型结构体的指针变量pt
这里需要注意一点,数组的变量名代表了该数组的首地址,所以数组名可以直接赋值给指针变量。而结构体指针的变量名需要使用“&”才可以将地址给结构体变量。
还需要加一个 pt = &book;

通过结构体指针访问结构体成员有两种方法:
第一种:
结构体指针).成员名
注意:这里加括号是因为“.”运算符的优先级要高于“
”运算符。
第二种:
结构体指针->成员名
注意“->”之间不能有空格,另外他的优先级与“.”的优先级是一样的。
以上两种是完全等价的

第一种引用方式如下:

# include <stdio.h>struct Date
{int year;int month;int day;
};struct Book
{char title[128];char author[48];float price;struct Date date;//结á构1体?的?嵌?套?char pulisher[48];}book = {"小甲鱼飞,"小甲鱼",9.9,{2017,1,11},"清华大学"
};void main(void)
{struct Book*pt;pt = &book; printf("书名:%s\n",(*pt).title);printf("作者:%s\n",(*pt).author);printf("售价:%0.2f\n",(*pt).price);printf("出版日期:%d-%d-%d\n",(*pt).date.year,(*pt).date.month,(*pt).date.day);   printf("出版社:%s\n",(*pt).pulisher);}

第二种引用方式

# include <stdio.h>struct Date
{int year;int month;int day;
};struct Book
{char title[128];char author[48];float price;struct Date date;//结构体的嵌套char pulisher[48];}book = {"小甲鱼飞,"小甲鱼",9.9,{2017,1,11},"清华大学"
};void main(void)
{struct Book*pt;pt = &book; printf("书名:%s\n",pt->title);printf("作者:%s\n",pt->author);printf("售价:%0.2f\n",pt->price);printf("出版日期:%d-%d-%d\n",pt->date.year,pt->date.month,pt->date.day);         printf("出版社:%s\n",pt->pulisher);}

自学结构体(小甲鱼c语言)相关推荐

  1. c语言获取结构体大小sizeof,C语言sizeof求结构体数组长度

    C语言sizeof求结构体数组长度 C语言sizeof求结构体数组长度 #include typedef struct ss{ char a;//偏移量为0,大小为1,0能被1整除,=1 short ...

  2. c语言常量结构体的成员,c语言之结构体

    c语言之结构体 1.结构体基础知识 C语言提供了两种类型的聚合数据类型(能够同时存储超过一个的单独数据),数组和结构.数则是相同类型的元素的集合,而结构也是一些值的集合,这些值称为它的成员,单一个结构 ...

  3. 避免野指针的方法及结构体小细节

    避免野指针的方法 1 定义指针变量的时候,指针变量赋值成NULL 2 释放的时候,判断是不是NULL 3 释放完毕以后再赋值成NULL 结构体小细节 typedef struct _Teacher{ ...

  4. c语言结构体加联合,C语言:结构体和联合体(共用体)

    结构体:struct 1.结构体变量的首地址能够被其最宽基本类型成员的大小所整除. 2.结构体每个成员相对于结构体首地址的偏移量(offset)都是成员的整数倍. 3.结构体的总大小为结构体最宽基本类 ...

  5. 自学B站小甲鱼数据结构课程-C语言实现基础数据结构-栈-的例子

    看这个代码前,建议先看完小甲鱼栈数据结构那节课 栈数据结构讲解 我是第一次学数据结构这个课,这个数据结构课,对C语言水平要求还是有点高的,最基本的就是得熟悉指针,像结构体指针,还有C语言的数据类型了, ...

  6. C语言笔记含源码(变量、输入输出、分支、循环、函数、数组、指针、字符串、结构体)小总结

    文章目录 一.变量与输入输出 二.分支语句 三.循环 四.函数 五.数组 六.指针 七.字符串 八.结构体 一.变量与输入输出 定义变量需要:类型.变量名.变量值(可有可无) #include < ...

  7. 结构体复数相乘c语言,复数乘法中的结构体赋值实现代码

    复数乘法中的结构体赋值实现代码 废话不多说,直接上代码 复制代码 代码如下: #include using namespace std; typedef struct { double real; d ...

  8. c语言结构体定义坐标,C语言结构体定义的方法汇总

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...

  9. 如何用c语言结构体建立data,C语言结构体使用

    结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类. 个人认为是C语言实现面向对象编程非常重要的数据类型之一 结构体的使用分为定义.引用. ...

  10. c语言结构体的位操作,C语言之路---结构体、位运算及预处理命令

    一.结构体 1).概念 结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member). 结构体也是一种数据类型,它由程序员自己定 ...

最新文章

  1. [UML]UML系列——用例图中的各种关系(include、extend)
  2. 微软在C# 8中引入预览版可空引用类型
  3. ios 设备方向判断
  4. linux命令之上传文件和下载文件
  5. XML简介及基本语法
  6. python绘制k线图的步骤_Python使用PyQtGraph绘制股票行情K线图
  7. loadrunner—事务、TPS
  8. 异常:没有找到本地方法库,java.lang.UnsatisfiedLinkError: no trsbean in java.library.path
  9. Python 爬虫+tkinter界面 实现历史天气查询
  10. 2019.02.10 17:49
  11. vb入门教程 经验分享
  12. 白盒测试:为什么要做白盒测试
  13. SQLite 查询得到今天日期
  14. vue怎么给pc端浏览器设置一个最小屏幕_图文讲解uni-app的PC宽屏适配方案
  15. 基于k-近邻算法的室内WiFi位置指纹定位实验报告
  16. SAS(二)SAS基本数据类型及SAS基本模块的介绍
  17. iFunk执政官游戏本,不仅仅是游戏本
  18. [OpenCV]关于opencv不能打开某些视频得问题
  19. html返回首页页面代码,后台返回的HTML整个页面代码打开方法
  20. Spring MVC原理解析

热门文章

  1. git使用puttygen生成公钥私钥
  2. 使用TortoiseGit自带的puttygen生成ssh密钥
  3. 车辆模型-跟踪误差模型
  4. Python 疾病诊断归一化
  5. 基于matlab的16QAM调制解调仿真
  6. 基于Go调用国密SM2算法
  7. 【项目实战】Python基于Apriori关联规则算法实现商品零售购物篮分析
  8. 学神经网络需要什么基础,神经网络从入门到精通
  9. MySQL练习题(经典50题)
  10. 机器人码垛手持式编程_码垛机器人编程软件图解教程