首页 > 其他分享 >结构体

结构体

时间:2023-03-03 15:12:19浏览次数:34  
标签:struct int s1 MyStruct xx 结构 变量

1.为什么需要结构体?

没有结构体之前,在C语言中,数据的组织依靠:变量+数组。
最初最简单的时候,只需要使用基本数据类型(int char float double)来定义单个变量,需要几个变量就定义几个。
后来情况变复杂了,有时需要很多意义相关的变量(譬如需要存储及运算一个班级的学生分数)这时候数组出现了。数组解决了需要很多类型相同、意义相关的变量的问题。但是数组是有限制的。数组最大的不足在于,一个数组只能存储很多个数据类型相同的变量。所以碰到需要封装几个类型不同的变量的时候,数组就无能为力。

2.什么是结构体?

  • 结构体是一个集合,集合中包含很多个元素,这些元素的数据类型可以相同,也可以不相同。所以结构体是一种数据封装的方法。结构体存在的意义就在于,把很多数据类型不相同的变量封装在一起,组成一个大的新的数据类型。

  • 数据结构:把庞大复杂的数据用一定的方式组织管理起来,便于操作(查找,增加,删除等)这就叫数据结构。

结构体和数组的关联:

  • 数组是一种特殊的结构体,特殊之处在于封装内的各个元素类型是相同的。结构体和数组都是对一些子元素的封装,因此定义的时候都是封装作为整体定义,但是使用的时候,都是使用封装中的子元素。一般结构体变量和数组变量都不会作为一个整体操作。

3.结构体的初始化

  • 结构体变量和普通变量一样,作为局部变量时,如果定义的时候无初始化也无显式赋值,则结构体变量中的子元素的值是随机的。
    发现2种C语言接受的结构体初始化方式。
    第一种,完全初始化。{xx, xx, xx, xx, xx};
    第二种,部分初始化。
    {
    .a = xx,
    .b = xx,
    .c = xx,
    .d = xx,
    };

  • 新增关键字: struct

  • 新增操作符: .

// 1、结构体类型的定义是在函数外面,不是里面
// 2、结构体定义的是一个新的组合类型,而不是变量,也不消耗内存。
//    稍后在定义变量的地方,再使用该结构体类型来定义变量。
struct Student
{
	char name[20];				// 学生姓名
	unsigned int num;			// 学号
	int isMale;					// 性别
};

struct MyStruct
{
	int a;
	char c;
	float f;
	double d;
};						// 注意这里的;不能少

struct ArrayStruct
{
	int a;
	int b;
	int c;
	int d;
};

使用

int main(void)
{
/*
	int a[4];
	ArrayStruct s1;
*/

	//struct MyStruct s = {100, 'd', 12.445, 111.111111111111};	// ok
	//struct MyStruct s = {100; 'd'; 12.445; 111.111111111111};	// 不行
	
	
/*	
	// 这种部分ok的是最危险的,千万不用。

	struct MyStruct s = 
		{
			s.a = 1444, 					// 只能从前到后依次初始化,重要只要空
			s.c = 'k', 						// 一个,后面的就遭殃了
			s.f = 3.13,
			//s.d = 32.222222,
		};										// 部分ok
*/	
/*	
	struct MyStruct s = 
		{
			s.a = 1444; 					
			s.c = 'k'; 						
			s.f = 3.13;
			s.d = 32.222222;
		};										// 不行,初始化式中分号不好用
*/
/*
	struct MyStruct s = 
		{
			//.a = 1444, 					
			.c = 'k', 						
			.f = 3.13,
			.d = 32.222222,
		};									// ok
*/
/*
	struct MyStruct s = 
		{
			a = 1444, 					
			c = 'k', 						
			f = 3.13,
			d = 32.222222,
		};									// 错误,.是不能省略的
*/
/*
	struct MyStruct s = 
		{
			. = 1444, 					
			. = 'k', 						
			. = 3.13,
			. = 32.222222,
		};			
*/								// 不行,.后面的元素名不可省略。


	

	printf("s.c = %c, s.d = %f.\n", s.c, s.d);
/*
	struct MyStruct s;			// 先定义变量,定义同时无初始化
	
	s.a = 1444;					// 定义之后再赋值
	s.c = 'k';
	s.f = 3.1415;
	s.d = 3.423246;
	
	s.a += 100;	
	printf("s.a = %d.\n", s.a);
	
	//s.c = 'y';
	printf("s.c = %c.\n", s.c);
*/

/*
	struct Student s1;			// s1是一个变量,类型是struct Student
	
	// 给结构体变量赋值
	s1.name[0] = 'J';
	s1.name[1] = 'i';
	s1.name[2] = 'm';
	s1.name[3] = '\0';
	
	s1.num = 123;
	s1.isMale = 1;
	
	// 打印检验看对不对
	printf("s1.name = %s, s1.num = %d, s1.isMale = %d.\n", 
			s1.name, s1.num, s1.isMale);
*/


	
	return 0;
}

标签:struct,int,s1,MyStruct,xx,结构,变量
From: https://www.cnblogs.com/zggb/p/17175694.html

相关文章

  • UnityEditor扩展,将IMGUI工作流转变为RMGUI,实现一个树状层级结构模型简化版UIElement的
    Unity内置Editor的IMGUI模式能够满足日常扩展,大多数情况下EditorGUILayout提供的控件,和布局方法BeginVertical,BeginHorizontal,配合大量的内置控件,可以满足快速开发需求。另......
  • FPGA 原理、结构、开发流程简述
    简介本文主要介绍了博主在阅读天野英晴主编的《FPGA原理和结构》一书时的读书笔记,方便更好的了解和入门FPGA。本博客图片均来自于参考文献[1]。FPGA特性和粒度FPGA是......
  • 并行计算机体系结构
    网络的分类OCNsSANsLANsWANs网络基本概念链路:节点或开关之间的连接线。网络:开关为V,链路为E组成的图;当开关之间全连接,称为全连接网络;网络分类间接网络Ω网络任意......
  • 《程序员的自我修养》学习笔记——ELF 文件结构介绍【第二弹】
    ELF文件结构介绍文件头以ELF文件64位版本为例:e_ident【ELF魔数16byte】1-4字节:ELF文件都必须相同的标识码,分别为0x7F,0x45,0x4C,0x46第5字节:程序位数(0x01......
  • C/C++ 数据结构使用数组实现队列的基本操作
    //使用数组实现队列#include<iostream>#include<Windows.h>usingnamespacestd;#defineMAXSIZE5//队列的最大容量typedefintDataType;//队列中的元素类型......
  • zip文件结构
    转starshine博客压缩源文件数据区:504B0304:这是头文件标记(0x04034b50)1400:解压文件所需pkware版本0000:全局方式位标记(有无加密)0800:压缩方式5A7E:最后修改文件......
  • 城市“一网统管”视频融合平台EasyCVR接入与展示下级平台组织结构的实现流程
    EasyCVR平台可支持多协议、多类型设备接入,可覆盖市面上绝大多数的视频源设备,平台可在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴......
  • 两数之和 II - 输入有序数组(数据结构和算法两种实现方式)
    题目:给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[ind......
  • 数据结构1.1
    一、简述本节介绍一下单调栈以及单调栈的一些应用。二、单调栈所谓单调栈,就是具有存储的元素呈现某种单调性的栈。比如:从栈底元素到栈顶元素是单调递减的,就是一个单调......
  • mysql索引结构
    Mysql索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包括以下几种:B+Tree索引:最常见的索引结构,大部分存储引擎都支持B+Tree索引。Hash索引:底层数据结构是用Hash......