结构体详解结构体基本用法:
结构体就是把相同或者不同类型的便利放到一起,这和c++中的类很像,但没有c++那么复杂,c语言中的结构体申明如下:
struct student //结构体名{ char name[10]; //姓名 int number; //编号 int grade; //成绩};申明很简单,其内存是按顺序放置的。
下面需要注意的几点:
1.申明时不能初始化(为什么后面会讲)
2.申明只是申明一个结构体,是不能使用的
3.获取结构体大小可以用sizeof(struct student)
4.结构体可以嵌套定义
5.结构体大小必须是所有成员变量大小的整数倍
一般我们会使用新定义类型来代替结构体,其实就是给结构体起一个新的名字
typedef struct student{ char name[10]; int number; int grade;}stu;stu stu1={张三,001,95};//定义一个stu1结构体变量,并进行初始化注意:只有在定义的时候才能一起初始化,一旦定义了之后,不能一起初始化,但是可以分别初始化,为啥之后不能初始化,主要原因是因为结构体变量是按顺序存储的。
这样stu表示的实际就是结构体,具体可以参考typedef用法。
结构体既然申明了那怎么使用了,这里我们必须定义一个结构体变量,注意是结构体变量,也就是定义一个变量,这里的变量的类型是结构体,因此结构体申明部分其实就是申明一个新的变量类型,因此结构体是一个类型,不是变量,所以这也就是为啥申明的时候里面不能进行初始化的原因。 下面举个例子来使用结构体:
我们引用结构体是可以这样引用:stu1.name=李四;stu1.number=002;stu1.grade=100;上面的引用方式是成员引用,也就是普通变量方式引用,还有一种引用就是结构体指针引用,这两种引用的方式有很大不同,后面会讲到。指针引用时必须申明一个结构体指针,就像在整型变量中使用指针一样,我们需要先定义一个整型指针变量,然后使用它,这里也是一样。stu *stu2; //定义一个stu2结构体指针变量上面不能进行初始化,因为其实质是一个指针,不能像变量一样可以一起初始化(当然,指针实质还是变量,但是其使用不一样,所以一般说指针还是指指针变量)
既然是指针,那么必须指向一个内存地址,因此指针变量使用之前必须指向一块特定的内存地址,结构体指针也不例外。 那我们怎样初始化结构体指针呢
第一种方式用动态分配内存的方式:
stu2=(stu*)malloc(stu);第二种方式使用结构体变量间接方式:
stu2=&stu1;这样结构体stu2指向的就是stu1的首地址。
结构体高级用法:
在函数中,如果参数是结构体,那么又该怎样使用呢,其实我们使用结构体和使用变量是一样的,定义如下
void swap(stu stu1,stu stu2){ int exchange=0; exchange = stu1.grade; stu1.grade=stu2.grade; stu2.grade=exchange; /****** ...... ******/}这样就可以使用结构体变量了,但是请思考下面代码结果:
stu stu3={王五,003,80};swap(stu1,stu3);执行这个函数两个结构体中的grade会交换么? 结果是不会。 这里就和函数中讲解的是一样的,那么我们怎么才能将其交换呢,在普通函数中给的方法是使用指针,因此这里我们同样可以使用指针来操作,我们必须将函数的形参定义为结构体指针变量。 如下:
stu swap(stu *stu1,stu *stu2){ int exchange=0; exchange = stu1->grade; stu1->grade=stu2->grade; stu2->grade=exchange;}这样我们使用
swap(&stu1,&stu3);就可以将其调换位置了
双十二最值得入手的平价蓝牙耳机,蓝牙耳机平价好用牌子
国内半导体形势火热,带动设备增长3%
希尔顿酒店使用智能访客机系统提升用户体验
5G到来,英特尔、高通等5家芯片制造商将获益最多
既能悬浮点灯又能悬浮充电的手表
结构体基本用法详解
回顾FPGA的三个时代分析和可编程介绍的分析
升级机型覆盖面超乎想象,MIUI8.2稳定版五大升级亮点
高增益LC谐振放大器的设计
IGBT 的结构及主要参数
嵌入式linux之Uboot和系统移植
用EN8F158做智能遥控器芯片的方案开发
锂电池的保护神,壹特锂电池保护板
小米最值得购买手机汇总:小米MIX2、小米6、小米5X、红米Note4X,你选择买谁?
长沙大规模智能网联汽车示范应用正式启动,打造车联网发展新高地
AMEYA360:尼得科科宝滑动型DIP开关CVS产品参数及价格
固态开关是指什么,固态开关的应用
LED厂晶元光电、隆达电子通过换股成立的富采投资控股成立
销售/回收HP54645D示波器HP54645D小兵/罗S
工业虚拟3d仿真车间管理系统