栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言中的关键字struct、union、enum、typedef

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言中的关键字struct、union、enum、typedef

一、struct

本质就是具有相同或者不同数据元素的集合

#include
//定义结构体的本意就是制作类型
struct stu {
	char name[30];
	int age;
	char sex;
	int weight;
};
int main()
{
	struct stu cls[20];
	struct stu zhangsan;
}

给结构体初始化,初始化是可以整体的,但是赋值只能单个的赋值

单个赋值

#include
#pragma warning(disable:4996)
struct stu {
	char name[30];
	int age;
	char sex;
	int weight;
};
int main()
{
	struct stu c;
	//c.name = "zhangsan";error//数组并不能直接赋值,需要用strcpy
	strcpy(c.name, "zhangsan");
	c.age = 18;
}

第二种赋值方法
在结构体很大时,采用该方法的效率更高,需要传参的话用该方法更好

struct stu* p = &c;
	(*p).age = 18;
	p->age = 18;
柔性数组

柔性数组是在结构体中放在最后一个元素的是数组(大小为零的一个是数组),柔性数组的使用是为了,在原始的结构体之后在开辟额外的空间,开辟的空间就是给柔性数组使用

二、union

union称为联合体操作符,union开辟的整个空间是由最大的变量决定的

union un {
	int a;
	char b;
};
int main()
{
	union un x;
	printf("%dn",sizeof(x));

union赋值

union un {
	int a;
	char b;
	char c[20];
};
int main()
{
	union un x;
	//x.c = "zhangsan";给是数组赋值需要用strcpy
	strcpy(x.c, "zhangsan");
	x.a = 10;
	//第二种赋值的方法
	union un* p = &x;
	p->a = 10;

}

联合体的所有地址都是一样的
a和b永远在c的低地址出开辟空间

#include
union un {
	int a;
	char b;
	char c[20];
};
int main()
{
	union un x;
	printf("%pn", &x);
	printf("%pn", &(x.b));
	printf("%pn", &(x.c));
	return 0;
}

输出结果

联合体与大小端的关系
下面这是两种方式第一种属于小端第二种属于大端

union un {
	int a;
	char b;
};
int main()
{
	union un x;
	x.a = 1;
	if (1 == x.b)
	{
		printf("小端");
	}
	else {
		printf("大端");
	}
	return 0;
}

输出结果

三、enum

在现实当中有一大部分具有相关性的代码需要体现出来,常量名不用数字,而用英文代替有可描述性
如果常量不多的情况下,可以选择用宏,如果常量较多且具有相关性选择用enum

enum color {
	RED,
	BLUE,
	YELLOW,
	BLACK
};
int main()
{
	enum color c = RED;
	printf("%dn", RED);
	printf("%dn", BLUE);
	printf("%dn", YELLOW);
	printf("%dn", BLACK);
}

输出结果

enum color {
	RED=10,
	BLUE,
	YELLOW,
	BLACK
};
int main()
{
	enum color c = RED;
	printf("%dn", RED);
	printf("%dn", BLUE);
	printf("%dn", YELLOW);
	printf("%dn", BLACK);
}

输出结果

四、typedef


typedef定义的变量int*和直接定义的指针类型的区别

用宏定义#define定义的类型与typedef的区别


typedef 本身是一种存储类的关键字,与 auto、extern、static、register 等关键字不能出现在同一个表达式中。

typedef static int* int_;//error
最后:文章有什么不对的地方或者有什么更好的写法欢迎大家在评论区指出来。 暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号