首页 > 其他分享 >结构体初阶

结构体初阶

时间:2023-05-27 17:01:08浏览次数:33  
标签:初阶 20 struct int char student 结构

一、结构体的声明

1、什么是结构体?

      结构体是一组不同或相同类型的值的集合,这些值被称为成员变量,这些成员变量可以是变量、常量、数组、指针、结构体。

2、结构体定义的方式

定义结构体的关键字  结构体标签

{

        结构体的成员变量

}结构体变量名;(定义结构体的大括号尾部有个分号,绝对不       能省略。)

定义结构体关键字(struct) + 结构体标签 被称为结构体类型名。

举例:定义一个学生信息的结构体

struct student
{
	char name[20];//学生姓名
	int age;//学生年龄
	char sex[5];//学生性别
}s;

二结构体变量的定义和初始化

1、结构体变量的定义

方法一:

struct student
{
	char name[20];//学生姓名
	int age;//学生年龄
	char sex[5];//学生性别
}s;

声明结构体成员变量后,直接在结尾定义结构体变量s。

方法二:

struct student
{
	char name[20];//学生姓名
	int age;//学生年龄
	char sex[5];//学生性别
};

int main()
{
	struct student s;
	return 0;
}

声明结构体成员变量后,回到主函数中定义结构体变量s。

2、结构体变量的初始化

      初始化也有两种方式:

      方法一:

struct student
{
	char name[20];//学生姓名
	int age;//学生年龄
	char sex[5];//学生性别
}s = {"张三", 20, "男"};

      在结尾定义的结构体变量直接对其初始化。

      方法二:

struct student
{
	char name[20];//学生姓名
	int age;//学生年龄
	char sex[5];//学生性别
};

int main()
{
	struct student s = { "张三", 20, "男"  };
	return 0;
}

      在主函数中对定义的结构体变量进行赋值初始化,就如同

int a = 10;直接对变量a进行赋值。

3、结构体的嵌套初始化

struct score
{
	float math;
	float english;
}w;

struct Student
{
	char name[20];//学生姓名
	int age;//学生年龄
	char sex[5];//学生性别
	struct score w;
};

int main()
{
	struct Student s = { "张三", 20, "男", {88.5, 85.5} };
	return 0;
}

这里可以对一个结构体中嵌套的另一个结构体进行初始化,但当要初始化嵌套的结构体的时候,因为嵌套来的结构体也是结构体,要对其有特殊的说明,所以初始化这种结构体成员的时候,要加上{}。

如果结构体中有指针,有明确指向的话就明确指向那个地址,否则就置为空指针NULL。

三、结构体成员的访问

访问结构体成员需要用到两个操作符:. 和 —>。

1、.访问结构体成员

.操作符需要接收两个操作数:结构体变量名 . 结构体成员

如:

struct score
{
	float math;
	float english;
}w = {55.5, 88.8};

struct student
{
	char name[20];//学生姓名
	int age;//学生年龄
	char sex[5];//学生性别
	struct score w;
}s;

int main()
{
	struct student s = { "张三", 20, "男", {88.5, 85.5} };
	printf("%s\n%d\n%s\n%.2f  %.2f\n", s.name, s.age, s.sex, s.w.math, s.w.english);
	return 0;
}

其中s是结构体变量名,是struct student类型结构体的变量,w也是同理,所以可以用s.成员变量(s.name)来访问输出这个成员变量。

当要在本结构体中访问声明的其他结构体变量时,可以先用s.另一个结构体变量名,再.去访问另一个结构体中的成员变量。

结构体初阶_成员变量

2、——>访问结构体成员

——>这个操作符也有两个操作数:指针——>成员变量

如:

结构体初阶_嵌套_02

如图所示,在主函数中我们创建了一个结构体指针ps,将结构体s的地址存放在ps中,当想访问结构体s中的成员时,使用指针——>成员(等价于(*ps).成员)。当想访问结构体w中的成员时,用指针指向结构体w:ps——>w,因为w是个结构体变量不是地址,所以访问结构体w成员时,直接使用w.成员,结合起来就是ps——>w.成员。

四、结构体传参

结构体传参时可以像函数一样,传值调用和传址调用。

如:

struct score
{
	float math;
	float english;
}w = {55.5, 88.8};

struct student
{
	char name[20];//学生姓名
	int age;//学生年龄
	char sex[5];//学生性别
	struct score w;
};

void test1(struct student* ps)
{
	printf("%s\n%d\n%s\n%f  %f\n", ps->name, ps->age, ps->sex, ps->w.math, ps->w.english);
}

void test2(struct student s)
{
	printf("%s\n%d\n%s\n%.2f  %.2f\n", s.name, s.age, s.sex, s.w.math, s.w.english);
}


int main()
{
	struct student s = { "张三", 20, "男",{55.5, 88.8} };
	struct student* ps = &s;
	test1(ps);
	test2(s);
	return 0;
}

      在结构体传参时要传递结构体地址,因为:函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

结尾:感谢你能看到这里,如果有写的不对的地方请给位不吝赐教,谢谢啦!

结构体初阶_嵌套_03

标签:初阶,20,struct,int,char,student,结构
From: https://blog.51cto.com/u_15865089/6362679

相关文章

  • 结构型——桥接模式
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html什么是桥接模式?桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和......
  • 结构型——装饰器模式
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html什么是装饰器模式?装饰器模式(DecoratorPattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型......
  • 结构型——组合模式
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html什么是组合模式?组合模式(CompositePattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合......
  • 结构型——适配器模式
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html什么是适配器模式?适配器模式(AdapterPattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立......
  • 网安-计算机体系结构
    一、计算机体系结构图灵、香农、冯诺依曼(1)计算机硬件组成(看得见摸得到)1、cpu大规模高精度的集成电路逻辑上分为:控制单元、存储单元、运算单元核心数:物理核心数线程:超线程技术,逻辑处理器频率:工作频率,1s产生的脉冲信号32位和64位:CPU以此能处理的位数,64位可以向下兼容 指......
  • [5月摸鱼计划] 浅谈DCDC电压变换(原理、结构、可用)
    DCDC转换器简介在电子产品中,我们常需要不同的直流电压来为电路提供工作,这时我们便会见到LDO和DC/DC的身影,但是严格意义上LDO也是一种DC/DC,在电源芯片选型中,LDO和DC/DC则是两种完全不同的芯片。与线性稳压器LDO相比较,效率高是DC/DC的显著优势,通常效率在70%以上,效率高的可达到95%以上......
  • 数据结构之——栈
    @TOC前言本文主要讲述特殊的线性表——栈:栈是什么,栈的特点数据结构中有一种特殊的线性表叫栈。栈有一种特点:它允许后进入的数据先拿出来。类似一个弹夹,或是一个装砖头的容器。栈的基本操作有如上图:类比一个缸,缸的底端是栈底,顶端是栈顶,放入数据称为入栈,取出数据称为出栈。对于一个......
  • 【触想智能】工业安卓一体机的基本组成结构你了解吗?
    工业安卓一体机是指采用ARM架构的工业一体机,也被称为安卓工控一体机。工业安卓一体机的主要作用是采集各渠道信息,并给出精确计算,同时发出正确的操作指令让外设完成设计的相应工作任务。目前工业安卓一体机已经在社会各行各业得到广泛应用,比如在工厂生产车间、智慧小区、......
  • 用Python开发输入法后台(5)——数据结构
    全部汉字我从网上收集了一些资料,构建了一个<全部汉字.json>文件,文件格式如下所示:{"吖":[["aa","ya"],"szhdps"],"呵":[["aa",......
  • 前端仿企查查、天眼查关联投资结构 股权结构 树形结构 控股结构
    快速实现前端仿企查查、天眼查关联投资结构股权结构树形结构控股结构,下载请访问uni-app插件市场:https://ext.dcloud.net.cn/plugin?id=12073效果图如下:  **html部分**<template><viewclass="content"><CCBCashTreev-if="(curTreeName.length>0)":treeName="cu......