C 语言自定义类型知识总结

C语言知识点思维导图.xmind 用于C程序设计复习指导,囊括所有基础知识; 数据类型,运算符,流程结构,内存管理,函数,位运算,文件操作等 个方面基础知识,希望对你有所帮助。 立即下载

知识框架:

1 .结构体类型创建

2.结构体的初始化

3.结构体的内存对齐

4.位段

5.枚举和联合

 

 

一.结构体类型的创建

   C语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,结构是一些值的集合,这些值成为成员变量,结构体每个成员可以是不同类型的变量。这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体.  

结构体类型的声明:描述一个学生

struct stu
{
	char name[10];
	int age;
	char sex[5];
	char id[25];
};/*分号不能丢*/

下面对结构体的语法做一些解释:

看下面这段代码:

struct stu
{
	int x;
	char y;
	float z;
};e/*分号不能丢  这里声明了一个e的变量,它里面包括整形变量的x,字符类型的y,浮点类型的y*/
struct stu
{
	int x;
	char y;
	float z;
} t[20], * z;/*分号不能丢 这里创建了t和z t是一个数组,它包括20个结构,z是一个指针,它是指向其类型的指针 */

虽然两个结构体里的成员列表相同,但这两个声明被编译器识别成两个完全不同的类型。

但是这是不是意味着某种特定类型的所有结构都必须使用一个单独的声明来创建呢?
事实并非如此。标签tag允许为成员列表提供一个名字,这样他就可以在后续的声明中使用。标签允许多个声明使用同一个成员列表,并且创建同一种类型的结构,看下面这个例子:

struct stu
{
	int x;
	char y;
	float z;
} ;

 

这个声明把标签stu和成员列表联系在一起,该声明并没有提供变量列表,所以它并没有创建任何变量。
注意: 标签只是标识了一种模式,用于声明未来的变量,但无论是标签还是模式,其本身都不是变量。

结构体类型的访问:

(1)、结构体变量访问成员: 结构体变量是通过(.)操作符访问成员的。

(2)结构体指针访问结构体成员:

二:结构体的初始化

结构体的初始化方式和数组的初始化方式相似。一个位于一对花括号内部,由逗号分隔的初始值列表可用于结构体各个成员的初始化,这些值根据结构体成员给出的顺序写出,如果初始列表的值不够,剩下的结构体成员将使用缺省值进行初始化。

比如:

struct stu
{
	int x;
	char y;
	float z;
} ;
struct stu a = { 1, 2, 3 };

三:结构对齐体内存

熟悉下面的代码,猜猜运行结果是多少:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
struct stu
{
	int x;
	char y;
	float z;
};
struct a
{
	char r;
	double a;
	int x;
};
int main()
{
	printf("%d\n", sizeof(struct stu));
	printf("%d\n", sizeof(struct a));
	system("pause");
	return 0;
}

好了,stu是12s是24

看看下面的规则:

  (1)、第一个成员在与结构体变量偏移量为0的地址处; 
  (2)、其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数 与 该成员大小 两者中的较小值。(vs中默认对齐数为8, Linux中默认对齐数为4) 
  (3)、结构体总大小为最大对齐数(每个成员变量都有一个对齐数,其中最大的一个就是最大对齐数)的整数倍。 
  (4)、如果嵌套了结构体的情况, 嵌套的结构体对齐到自己最大对齐数的整数倍地址上,结构体的整体大小就是所有最大对齐数(包含结构体的对齐数)的整数倍。

然而为什么会有内存对齐呢?

(1)、平台原因: 
  不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常; 
  (2)、性能原因: 
  数据结构(尤其是栈)应该尽可能的在自认边界上对齐,原因在于:为了访问未对齐的内存,处理器需要做两次内存访问,而对齐的内存仅需要一次访问。


四.位段

1.位段的内存分配

  (1)位段的成员可以是int, signed int, unsigned int或者是char(属于整形家族)类型; 
  (2)位段的空间上是按照需要以四个字节(int)或者一个字节(char)的方式来开辟的; 
  (3)以 上面那个位段的例子来说:它先开辟一个int的空间(4个字节,32个比特位)。a:2—>2个比特位,还剩30个比特位;   b:5—>5个比特位,还剩25个比特位;c:10—>占10个比特位,还剩15个比特位;c:30要占30个比特位,前面的15个不够用,浪费   掉这15个重新开辟一个int的空间再占用新空间的30个比特位,所以结果是两个int类型,占八个字节;   
  (4)位段设计很多不确定因素,位段是不跨平台的,注重可移植程序应该避免使用位段
2.位段跨平台问题

  (1)、int型位段被当做有符号数还剩无符号数不确定(由编译器决定) 
  (2)、位段中最大位的数目不确定(16位机器最大是16,32位机器最大是32,如果写成17,则在16位的机器上会出现问题) 
  (3)、位段中的成员在内存中从右向左分配还是从左向右分配C语言标准尚未定义 
  (4)、当一个结构体中包含两个位段,第二个位段比较大,无法容纳于第一个位段剩余的位时是舍弃剩余的还是利用,这也不确定。


 五.枚举和联合

枚举我们从字面意思就可以了解就是举例的意思

比如说一周有7天

enum
{
	mon,
	tues,
	wed,
	thur,
	fir,
	sat,
	sun
}; {}中的是枚举类型的可能取值,一般按照从0开始,然后逐渐加1

也可以赋值

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
enum
{
	mon=2,
	tues=3,
	wed=1,
	thur=8,
	fir=4,
	sat=5,
	sun=6
};

枚举的优点:

(1)增加代码的可读性和可维护性
(2)和#define 定义的标识符比较,枚举有类型检查,更加严谨
(3)防止了命名污染
(4)便与调试(#define定义的不能调试)
(5)使用方便,一次可以定义多个常量

联合也是一种自定义类型,它也包含一系列成员,它的特征是这些成员共用同一块内存空间,所以也叫共用体。

联合的特点:

联合的成员是共用同一块内存空间,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大那个成员)

union a
{
	char c;
	int e;
};

联合大小的计算:

(1)联合的大小至少是最大成员的大小
(2)当最大成员大小不是最大成员大小的整数倍时,就要对齐到最大对齐数的整数倍

好了,以上是我的总结,如果那里有问题,还请大牛们指点。

C语言知识点思维导图 C语言知识点思维导图,C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。 立即下载

相关推荐

c语言思维导图

C语言知识点思维导图.xmind

自定义数据类型(typedef,enum,struct,union)

typedef声明 用一个标识符声明某个数据类型的别名,这个标识符可以当做当作数据类型用。 typedef 已有类型名 新类型名 eg: typedef int natural;        natural i1,i2; enum枚举类型 有些实际问题的结果只有几种情况,如一周有7天,8就是不合法的。将需要的标量一一列举出来,就构成了枚举类型enum。 说明:不能对其赋值;

longjing1113的专栏 1634

C语言知识点全概括思维导图

C语言全知识点的树状图简介,思维导图书写,骨骼清晰明了,便于查看。

结构体 、位段、枚举、联合自定义类型

自定义类型: 一、结构体类型 1.结构体声明 也叫结构,是由一系列具有相同类型或不同类型的数据构成的数据集合。 //描述一个学生 //直接声明 struct stu{ char name[20]; int age; char sex[20]; char id[20]; }; //匿名结构体类型 struct { char n...

被封印的橘猫的博客 326

基于 openEuler 24.03 LTS 源码编译安装 Zabbix 7.4

Zabbix是一款开源的企业级分布式监控系统,支持网络、服务器、应用等多种IT资源的监控。核心功能包括数据采集、告警通知、可视化展示等,采用Server/Agent架构,支持多种操作系统。本文详细介绍了在openEuler 24.03系统上部署Zabbix 7.4.2的完整流程,包括环境准备、MySQL配置、PHP/Apache安装、Zabbix编译安装等步骤,为构建企业级监控系统提供了实践指导。

广然笔记 1190

innovus实战攻略 | 用setUsefulSkewMode解锁时序优化的“隐藏技能”!

就像时序优化的“瑞士军刀”,参数虽多,但掌握了分类逻辑后,用起来其实很简单!如果你有更绝的用法,欢迎在评论区分享,大家一起卷起来!简单来说,它就是时序优化的“乾坤大挪移”。通过调整触发器的时钟到达时间,把关键路径的建立时间“借”给非关键路径,从而实现全局时序收敛。别急,这个命令就是你的“时序救星”!(工具最多只能借1.2ns的裕量,防止“借过头”导致新问题!这个参数能帮你兜底!(对关键路径“下死手”,确保优化到位!(设置上限,给工具套上“紧箍咒”!(直接跳过边界,避免优化反噬!(全局管理,防止“借过头”!

weixin_50820814的博客 1354

C语言:五种自定义类型

C语言:五种自定义类型

蔡欣致的个人博客 3890

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1951

C语言-自定义类型详解

我们创建了一个联合体Un,并用它创建了一个变量 un ,可以看到整个联合体大小刚好是最大成员i 的大小,而每个成员的起始地址也都一样,其内存上就类似图上,c占第一个字节,i占四个字节,两者有公共区域,成员间的改变相互影响,因此,联合体在同一时间,只能使用一个成员变量。链表是不同与顺序表的,它在内存中不是连续的,而又需要彼此间能找到,这时需要类型链条的关系将前后关联起来,所以需要结构体来组成这样的一个个节点,既能存放数据又能找到下一个节点,而下一个节点跟他的类型是一样的,就有了自引用。//使用时嵌套初始化。

2401_82414748的博客 1223

关于STM32编译报错:Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).

今天新建工程发现出现一个错误 —— …\Output\CG.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o). 但我觉得我的操作没有任何问题,而且配置和上一个文件比较是一模一样的。 于是我开始百度查询,然后发现了下面几个博客—— @weixin_44133391——STM32 编译错误 @dorlolok——iel5 编译报错 error: L6235E: More than one

纯粹,学术,热爱。 9402

从华为杯建模到论文录用:我的Biomedical Signal Processing and Control投稿全记录(含Latex模板与审稿人推荐技巧)

本文详细记录了作者从华为杯数学建模竞赛到Biomedical Signal Processing and Control期刊投稿的全过程,分享了如何将竞赛成果转化为学术论文的实用技巧,包括LaTeX排版中的常见陷阱与解决方案,以及审稿人推荐策略。特别提供了针对Elsevier模板的优化建议和高效回复审稿意见的方法,适合生物医学信号处理领域的研究者参考。

weixin_42549037的博客 452

C语言自定义类型(学会,不学废)

C语言结构体进阶,结构体位段,其他自定义类型

qq_53772930的博客 1911

智能检查点优化:动态频率与差异化存储的断点续训实践(模型训练丨容错机制丨人工智能)

本文深入探讨了大规模模型训练中智能检查点优化的核心实践。针对传统固定频率保存导致的存储浪费与恢复缓慢问题,提出了基于损失变化率的动态频率算法与分层差异化存储策略。通过PyTorch代码示例,详细展示了如何实现动态调度与增量保存,有效降低存储成本,并确保训练中断后能快速、可靠地恢复,显著提升训练任务的容错能力与经济效益。

weixin_29072299的博客 333

c语言自定义类型知识总结

c语言自定义类型知识总结 1.结构体类型创建 在创建结构体时根据实际情况在结构体中添加应有的元素。结构体在声明的时候,前面必须添加struct关键字。 例如: struct PersonInfo{ char name[1024]; char sex[1024]; int age; char phone[1024]; char address[1024]; }; 定义变量: struct Perso...

qq_41999670的博客 353

【数据集】全球首个10米分辨率精细分类土地覆盖数据集GLC_FCS10

【数据集】全球首个10米分辨率精细分类土地覆盖数据集GLC_FCS10

WW、forever的博客 1567

【NLP】第十五章:隐马尔可夫——前向算法、后向算法、维特比算法、Baum-Welch算法

就是好比我现在知道了观测序列Observations、掩藏序列States,我试着去学一个最优的(π, A, B),让在这个(π, A, B)下,观测序列Observations、掩藏序列States的概率最大。(2)矩阵B就更好理解了,矩阵B的第一行表示我已经抽取的是盒子1,那我抽取白球的概率就是0.4,抽取黑球的概率就是0.6了,因为第一个盒子只有4白6黑嘛。三是,由于每次抽取的小球的颜色的概率不仅取决于,小球所在的盒子中的黑白球的比例,还取决于你是从哪个盒子中抽的,所以其实观测序列还对应着一个。

因为热爱所以坚持 1162

【C语言必学知识点六】自定义类型——结构体

【C语言必学知识点六】自定义类型——结构体 详细介绍结构体的声明、使用的相关内容……

蒙奇D索大的博客 1952

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C语言:自定义类型知识点总结

.自定义类型部分知识。 知识点: 结构体类型创建 结构体初始化 结构体内存对齐 位段,位段计算机大小。 枚举+联合。 1.结构体类型创建 struct stu { char name[1024]; int age; char sex[1024]; char id[1024]; }; 2.结构体初始化 struct student { char name[1024]; int age; cha...

weixin_44779591的博客 164

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言中自定义类型部分知识总结

什么是自定义类型? 所谓自定义类型,就是除去基本类型,用户可以自己定义的一些类型,一般自定义类型包含三种:结构体、枚举、联合。 结构体 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 如: struct Student//类型声明 { char name[1024];//名字 int age;//年龄 char sex[1024];//性别 char id[1024]...

CyanWang1的博客 660

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C语言基础知识之自定义类型

一组不同类型成员(元素)的集合 注意:> (变量)可以没有,如果有,那么这变量就是自定义类型的全局变量 结构体成员访问: 根据结构体变量的类型,结构体的访问分为(1)结构体变量.成员名(2)结构体指针变量->成员名注意:>如果对结构体指针变量进行解引用,那么他对成员的访问也遵循方法一,*(结构体指针变量)->成员名在计算结构体大小时,会存在着内存对齐的现象,而这一现象牺牲了内存,但是换来了更快的速度按道理来说,char数组占十个字,int占四个字,double占八个字节,加起来一共22字节,为什

cutto的博客 440

【C语言】c语言中的自定义类型&动态内存管理部分知识

c语言自定义类型&动态内存管理

weixin_67312366的博客 486

【C语言必学知识点六】自定义类型——内存对齐与位段

【C语言必学知识点六】自定义类型——内存对齐与位段 详细介绍结构体中的内存对齐以及位段的相关内容……

蒙奇D索大的博客 1658

【C语言】自定义类型初阶知识点

结构体、枚举、联合体

moteandsunlight的博客 288

C C++最全C语言的自定义类型(结构体、枚举、联合体),C C++面试超详细知识点

当结构体类型定义在main函数外面的时候,这个结构体是全局变量;当结构体类型定义在main函数内部的时候,这个结构体是局部变量。int main()//按顺序初始化struct Stu s = { "纪宁",18,"男","123456789" };struct Stu S[2] = { {"纪宁",18,"男","123456789" },{"余微",18,"女","123456789" } };

2401_84978603的博客 938

零基础非科班也能掌握的C语言知识18 自定义类型

结构体 联合体 枚举 位段

Yusei_0523的博客 1106

C语言自定义类型——联合体和枚举的相关知识

本文介绍了C语言中两种自定义类型:联合体(union)和枚举体(enum)。联合体的特点是所有成员共享同一内存空间,大小至少能容纳最大成员,并需对齐到最大对齐数的整数倍,适用于对象有公共和独特属性的场景。枚举体用于列举可能的取值,默认从0开始递增,相比#define更具可读性和类型安全性,常用于状态机、选项标志等场景。文章通过代码示例展示了两种类型的定义、使用方法和内存特性,并分析了它们的应用优势。

2502_94189748的博客 701
上一篇: Mystrncmp
下一篇: 关于通讯录的实现
王翔乐
博客等级 码龄8年 6粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值