关于结构体初始化的自我小结

news2024/11/25 14:55:34

前段时间在一个项目中使用到结构体数组来存储产品不同型号的参数,使程序通用化,便于测试和快速生产。由于之前很少使用结构体数组,在初始化时遇到了一点小阻碍,于是便想到对于结构体和其数组的初始化操作做一个小总结:
结构体
结构体初始化其实有多种方式,以一个经典模板为例:

#include <stdio.h>

struct Student{
	char *name;
	int age;
	float score;
}stu = {"小王",18,80.5};

int main(){
	
	printf("%s %d %.2f\r\n",stu.name,stu.age,stu.score); 
	
	return 0;
}

输出如下:
在这里插入图片描述
也可以部分初始化:

#include <stdio.h>

struct Student{
	char *name;
	int age;
	float score;
}stu = {.name = "小王",.age = 18};

int main(){
	
	//printf("%s %d %.2f\r\n",stu.name,stu.age,stu.score); 
	printf("%s %d\r\n",stu.name,stu.age);
	
	return 0;
}

在这里插入图片描述
但是在这种方式下需要注意在指明的成员后接未指明的成员时,该未指明成员默认是按顺序初始化指明成员的下一位成员变量:

#include <stdio.h>

struct Student{
	char *name;
	int age;
	float score;
}stu = {.score = 60.5,.name = "小王",18,90.5};

int main(){
	
	printf("%s %d %.2f\r\n",stu.name,stu.age,stu.score); 
	
	return 0;
}

可以看到开始指明初始化了score和name,但是结果却是后面的18和90.5按顺序初始化了name后面的age与score,覆盖了前面指明的60.5。
在这里插入图片描述
除了在声明结构体时初始化,也可以在定义变量时初始化,或者定义后再赋值,格式同上面类似:

struct Student{
	char *name;
	int age;
	float score;
}; 
	struct Student stu = {"小王",18,80.5}; 
	struct Student stu = {.name = "小王",.age = 18,.score = 80.5};
	struct Student stu;
	
	stu.name = "小王";
	stu.age = 18;
	stu.score = 80.5;
	struct Student stu;
	struct Student *pstu = &stu;
	
	pstu->name = "小王";
	pstu->age = 18;
	pstu->score = 80.5;

上述方法都可以得到正确的输出。
但是同数组一样,下面的方法是错误的:

	struct Student stu;
	stu = {"小王",18,80.5};

结构体数组
与多维数组的初始化类似,在分清结构体的初始化方式后,结构体数组就很明了了,首先是声明时初始化:

#include <stdio.h>

struct Student{
	char *name;
	int age;
	float score;
}stu[3] = {    //或者不写明成员数量stu[]
	{"小王",18,80.5},
	{"小李",19,85.5},
	{"小赵",20,90.5}
}; 

int main(){
	int i,arrayNum;
	
	arrayNum = sizeof(stu) / sizeof(struct Student);
	
	for(i = 0;i < arrayNum;i++)
		printf("%s %d %.2f\r\n",stu[i].name,stu[i].age,stu[i].score); 
	
	return 0;
}

注意花括号与花括号之间使用的是逗号。

struct Student{
	char *name;
	int age;
	float score;
}stu[3] = {
	"小王",18,80.5,
	"小李",19,85.5,
	"小赵",20,90.5
};
struct Student{
	char *name;
	int age;
	float score;
}stu[3] = {
	[0].name = "小王",18,80.5,
	[1].name = "小李",19,85.5,
	[2].name = "小赵",20,90.5
}; 

均可得到如下的正确输出:
在这里插入图片描述
上述三种方式在定义时初始化同样适用:

struct Student{
	char *name;
	int age;
	float score;
}; 
int main(){
	int i,arrayNum;
	
	struct Student stu[3] = {
		"小王",18,80.5,//{"小王",18,80.5},
		"小李",19,85.5,//[1].name = "小李",19,85.5,
		"小赵",20,90.5
	};
	
	arrayNum = sizeof(stu) / sizeof(struct Student);
	
	for(i = 0;i < arrayNum;i++)
		printf("%s %d %.2f\r\n",stu[i].name,stu[i].age,stu[i].score); 
	
	return 0;
}

在定义后再初始化操作同第一节结构体初始化,只不过加了下标,不在赘述。而且下面这种方式仍为错误:

	struct Student stu[3];
	stu[3] = {    //或stu =  
		"小王",18,80.5,
		"小李",19,85.5,
		"小赵",20,90.5
	};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/526075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端笔试常考设计模式,操作系统,数据结构,ACM模板,经典算法,正则表达式,常用方法

考试时允许使用草稿纸&#xff0c;请提前准备纸笔。考试过程中允许上厕所等短暂离开&#xff0c;但请控制离开时间 笔试得分60%一般通过&#xff0c;面试答对80%才能通过 合集&#xff1a;2023年最全前端面试题考点HTML5CSS3JSVue3React18八股文手写项目笔试_参宿7的博客-CSD…

Microsoft Visual Studio 2019正式版离线安装包下载

原文地址&#xff1a;https://www.bitecho.net/microsoft-visual-studio-2019.html#respond Visual Studio&#xff08;简称VS&#xff09;是微软公司的开发工具包系列产品&#xff0c;包括了整个软件生命周期中所需要的大部分工具&#xff0c;如UML工具、代码管控工具、集成开…

DIY信号发生器:运放实现三角波、方波发生器(详细参数说明)+multisim仿真

前言 信号发生器是电子工程师最常用的几个仪器之一吧&#xff0c;三角波和方波是最常用的波形&#xff0c;在之前的文章中&#xff0c;我们已经介绍过RC延迟电路&#xff0c;今天我就教大家通过RC延迟和运放来实现三角波和方波。 仿真软件版本 本次介绍的电路是通过multisim…

kafka如何保证消息不丢失?半分钟的答案和半个小时的答案有点不一样。

文章目录 一、Kafka在哪些场景下有丢消息的可能&#xff1f;二、面试流经典答法三、为什么金融场景没人会用Kafka&#xff1f;总结 ​ kafka如何保证消息不丢失&#xff1f; 这是面试最常问到的问题。但是其实这是一个最体现综合实力的开放性题目。把这问题真正弄明白&#xf…

uni - app

uni-app 使用vue的语法&#xff0c;vue指令 小程序的标签和 API <template><view class"content"><image class"logo" src"/static/logo.png"></image><view class"text-area"><text class"t…

期末作业C#实现学生宿舍管理系统

??开发背景 完整代码下载地址&#xff1a;点我下载 优化移步&#xff1a; 《c#中在datagridview的表格动态增加一个按钮方法》 《C#实现多窗口切换&#xff1a;Panel详细教程&#xff08;亲测&#xff09;》 文章还在更新&#xff0c;上次更新时间2022/06/20 20:49 由于快期…

unapp微信小程序转发分享、携带参数

一、第一种方式&#xff1a; // 开启小程序原生右上角分享按钮uni.showShareMenu({// https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.htmlwithShareTicket: true,menus: [shareAppMessage, shareTimeline]//开启转发好友和转发朋友圈按钮});…

最详细python安装库的方法(以安装pygame库为例)

文章目录 前言 &#x1f680;&#x1f680; python安装库方法大全&#xff08;以安装pygame库为例&#xff09; &#x1f680;方法一、在pycharm内部直接安装【最简单的方法&#xff08;直接上图&#xff09;】 &#x1f680;方法二、&#xff08;在终端安装库&#xff09;…

Unity碰撞检测的必要条件

Unity中有两个独立的物理引擎&#xff0c;一个用于3D物理系统&#xff0c;一个用于2D物理系统。两个引擎是使用不同的组件实现的。因此BoxCollider和Rigidbody一起使用&#xff0c;代码中用OnTriggerEnter才能检测到触发;BoxCollider2D和Rigidbody2D一起使用&#xff0c;代码中…

(附源码)基于springboot考试系统 毕业设计 191015

基于springboot考试系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对在线考试等问题…

49天精通Java,第29天,Java内部类、java内部类的作用

目录 一、为什么需要内部类?二、内部类分为四种三、成员内部类1、什么是成员内部类2、代码实例3、成员内部类进阶代码实例4、控制台显示5、外部类访问内部类四、局部内部类五、匿名内部类1、匿名内部类简介2、代码实例3、控制台输出4、访问权限六、静态内部类七、内部类的使用…

【进阶C语言】内存函数(详解)

前言 上一期讲的函数都是和字符串相关的&#xff0c;但是我们在操作数据的时候&#xff0c;不仅仅是操作字符串的数据&#xff0c;还得需要内存函数的应用 内存函数的应用 1. memcpy1.1 memcpy的介绍1.2 memcpy的使用1.3 模拟实现memcpy库函数1.4 我想在1&#xff0c;2后面打印…

Ubuntu开启SSH免密登录

Ubuntu开启SSH免密登录 要实现SSH免密登录&#xff0c;首先需要准备一组公钥和私钥。将公钥放到服务器上&#xff0c;将私钥放到客户机上。当客户机连接服务器时&#xff0c;服务器会根据自身的公钥校验客户机的私钥&#xff0c;如果校验通过则允许连接。 一、创建密钥 在客…

(Linux)Centos7.*版本安装配置Java环境、Tomcat、Nginx并打包部署SSM框架web系统

目录 一、准备软件与安装包 (一)、必须的软件 1、点击下载Xshell 2、点击下载FileZilla (二)、准备安装包 1、点击下载JDK1.8Linux版本 2、点击下载Nginx 3、点击下载Tomcat 二、关于FileZilla软件的使用说明 (一)、FileZilla软件的打开和说明 (二)、配置服务器地…

什么是FIFO?

同步FIFO和异步FIFO 1、FIFO定义 FIFO是英文First In First Out的缩写&#xff0c;是一种先进先出的数据缓存器&#xff0c;他与普通存储器的区别是没有外部读写地址线&#xff0c;这样使用起来非常简单&#xff0c;但缺点就是只能顺序写入数据&#xff0c;顺序的读出数据&am…

C++修炼之筑基期第三层——拷贝构造函数

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;拷贝构造函数的概念&#x1f337;拷贝构造函数的特性 &#x1f490;专栏导读 &#x1f338;作者简介&#xff1a;花想云&#xff0c;在读本科生一枚&#xff0c;致力于 C/C、Linux 学习。 &#x1f338;本文…

Rocky9/Centos stream9 修改静态ip,修改网卡。

目录 需求&#xff1a; 修改ipv4地址为10.10.10.10 子网掩码为255.255.255.0 网关为10.10.10.254 dns为本机ip 当前版本&#xff1a; 前言&#xff1a; 正文&#xff1a; 后续其他方法拓展。 本人新建立一个QQ shell群&#xff0c;感兴趣的可以加入&#xff1a;637257233 …

瑞数5.5逆向笔记(纯扣算法)

瑞数5解密 首先看请求,请求返回202大概率是(瑞数3,4).返回412是瑞数5 还可以看后缀值 MmEwMD4xxxxx 就是4代瑞数&#xff0c;bX3Xf9nD5xxxxx 就是5代瑞数 区别4带上来有1-2个无限debugger,这个直接过掉就好,还会有一个假cookie,5带没有 1.meta content 动态的每次请求都会变…

IDEA如何运行SSM项目(超详细图解)

&#x1f4d6;本篇超级详细案例截图教学 IDEA如何运行SSM(Maven工程)项目&#xff0c;图片点击可放大仔细看 1、查看项目 项目里面一般会包含项目源码、数据库、环境配置教程、运行教程。 项目介绍文件有的是.md文件&#xff0c;这个需要记事本或者typora打开&#xff0c;wor…

【瑞吉外卖开发笔记】

瑞吉外卖开发笔记 源码地址 一、业务开发Day01 1、软件开发整体介绍 软件开发流程 角色分工 软件环境 2、瑞奇外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 3、环境搭建 开发环境搭建 数据库环境搭建 运行对应db_reggie.sql文件Maven项目搭建 新建Springb…