IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言进阶-自定义类型 -> 正文阅读

[C++知识库]C语言进阶-自定义类型

本章重点

深入了解结构体、枚举、联合

结构体

结构是一些值的集合
//结构体类型声明
struct tag				//tag结构体的标签			
{
	char name[20];
	int age;
}student;				//student是结构体变量,也是全局变量				


int main()
{
	struct tag student = { "zhangsan",18 };
	return 0;
}

匿名结构体类型

struct
{
	char name[20];
	int age;
}s1,*ps;

int main()
{
	ps=&s1;
	return 0;
}
//会报警告

结构自引用

typedef struct Node			//重定义
{
	int data;
	struct Node* n;			//自引用
}Node;

int main()
{
	return 0;
}

结构体的初始化

在这里插入图片描述

结构体的内存对齐

在这里插入图片描述

//头文件
#include <stddef.h>
//计算得出变量i的偏移量是4
//从变量c的起始位置向后数4个字节是变量i的其实位置
//所以计算得出S的大小是8个字节

修改默认对齐数

在这里插入图片描述

结构体传参

在这里插入图片描述

最好用指针这种方式,因为函数传参是需要压栈的
指针这种方式,参数前面最好加上const,安全一些
const struct* p

位段

1.位段的成员必须是intunsigned int或者signed int或者char类型(整型家族的)
2.位段的成员名后边有一个冒号和数字
3.位就是二进制位
4.位段上的空间是按照int类型或者char类型的方式开辟的,一次4个字节或者1个字节
5.位段是不跨平台的
#include <stdio.h>

struct A
{
	int _a : 10;		//int类型开辟4个字节空间,分配10个
	int _b : 20;		//在分配20个
	int _c : 30;		//不够了在开辟4个字节的空间
						//加起来就是8个字节
};

int main()
{
	printf("%d\n", sizeof(struct A));
	return 0;
}
位段在VS2019中是以下面这种方法保存的

在这里插入图片描述
在这里插入图片描述

位段的跨平台问题

1.int位段被当成有符号数还是无符号数是不确定的
2.位段中的最大数目不能确定(16位机器int最大16个字节,大于16会报错)
3.位段中的成员在内存中从左向右分配,还是从右向左分配尚未定义
4.当一个结构包含两个位段,第二个位段成员比较大,第一个位段剩下的位不能满足第二个位段,无法确定第一个位段剩余空间的情况

枚举

void menu()
{
	printf("**************************\n");
	printf("*****1.add    2.sub  *****\n");
	printf("*****3.mul    4.div  *****\n");
	printf("******    0.exit     *****\n");
	printf("**************************\n");
}

enum Calc
{
	EXIT,			//默认是0,依次加一
	ADD,
	SUB,
	MUL,
	DIV
};

void Add()
{
	int x, y;
	printf("请输入两个数:");
	scanf("%d %d", &x, &y);
	printf("%d\n", x + y);
}

int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			Add();
			break;
		}
	} while (input);
	return 0;
}
枚举的优点
1.增加代码的可读性和可维护性
2.和#define定义的标识符比较,枚举有检查类型,更加严谨
3.防止了命名污染
4.便于调试,#define不便于调试
5.使用方便,一次可以定义多个常量

联合(共用体)

联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:40:43  更:2021-09-10 10:42:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:50:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码