struct和union
struct的小秘密
C语言中的struct可以看做变量的集合,struct的问题:
空结构体占用多大内存?
例子1:空结构体的大小
#include<stdio.h>
struct ST
{
};
int main()
{
printf("sizeof(struct ST) = %d\n",sizeof(struct ST));
return 0;
}
这是C语言的灰色地带,各种解释没有谁对谁错。
结构体与柔性数组
- 柔性数组是大小待定的数组
- C语言中可以由结构体产生柔性数组
- C语言中结构体的最后一个元素可以是大小未知的数组
例子2:柔性数组分析
#include<stdio.h>
#include<stdlib.h>
typedef struct _SoftArray
{
int len;
int array[];
}SoftArray;
int main()
{
int len = 10,i=0;
SoftArray *p = (SoftArray*)malloc(sizeof(SoftArray)+sizeof(int)*len);
p->len = len;
for(i-0;i<len;i++)
{
p->array[i] = i+1;
}
for(i=0;i<len;i++)
printf("array[%d] = %d\n",i,p->array[i]);
free(p);
return 0;
}
C语言中的union
C语言中的union在语法上与struct相似,union只是分配最大成员的空间,所有成员共享这个空间。
例子3:struct和union
struct A
{
int a;
int b;
int c;
};
union B
{
int a;
int b;
int c;
};
int main()
{
printf("%d\n",sizeof(struct A));
printf("%d\n",sizoef(struct B));
return 0;
}
union的注意事项
union的使用受到系统小大端的影响
例子4:判断大小端的模式
union A
{
int a;
char c;
};
int main()
{
union A test;
test.a = 0x1234;
printf("test.c = %x\n",test.c); //34
return 0;
}
由上面结果可以知道,本机为小端模式。
小结
- struct中每个成员有独立的存储空间
- struct可以通过最后的数组标识符产生柔性数组
- union中所有数据成员共享同一个内存空间
- union的使用会受到系统大小端的影响
struct和union的更多相关文章
- 关于C中struct和union长度的详解
这几天看<代码大全>中的第十三章---不常见的数据类型,里面讲解到了C语言中的struct以及对指针的解释,联想到以前看过相关的关于C语言中stuct长度的文章,只是现在有些淡忘了,因此今 ...
- 【转】C/C++ struct/class/union内存对齐
原文链接:http://www.cnblogs.com/Miranda-lym/p/5197805.html struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(s ...
- 【转】结构struct 联合Union和枚举Enum的细节讨论
结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...
- struct 和union的区别
union ( 共用体):构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) struct ( 结构体 ):是一种构造类型 用途: 把不同的数据组合成一个整体——自定义数据 ...
- C语言进阶——struct和union分析10
struct的小秘密: C语言中的struct可以看作变量的集合 struct的问题:空结构体占用多大内存呢? 程序实例1: #include <stdio.h> struct TS { ...
- <转> Struct 和 Union区别 以及 对内存对齐方式的说明
转载地址:http://blog.csdn.net/firefly_2002/article/details/7954458 一.Struct 和 Union有下列区别: 1.在存储多个成员信息时,编 ...
- struct与 union的基本用法
结构体与联合体是C语言的常见数据类型,可对C的基本数据类型进行组合使之能表示复杂的数据结构,意义深远,是优异代码的必备工具.一. struct与 union的基本用法,在语法上union ...
- c++ struct enum union加typedef与不加typedef
struct/enum/union加typedef与不加typedef 匿名结构体 struct { int a; int b; } v; // 这里表示定义了一个结构体的变量v,且结构体类型没有名字 ...
- struct与union字节大小的终极解释
1.字节对齐的细节和编译器实现相关,但一般而言,如在windows下,就VC而言,满足一下三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除:2) 结构体每个成员相对于结构体首地址 ...
随机推荐
- CSS中的那点事儿(一)--- CSS中的单位1
单位主要用在规定元素的数值性css属性的,这里主要讨论应用的比较多的是width height padding margin font-size,而单位中应用最广泛就是%.px.em 百分比 百分比 ...
- Java 猫扑(mop)打卡小应用
唉 mop又没打卡,前面十几天全没啦,像我们这些IT码农虽然天天上网,但是总是忘记打卡,这不一失足生成千古恨,失败了撒.好不容易每次打卡都能得几百份的,唉.1. [代码][Java]代码 pac ...
- 无限轮播器的bug修复
前言:上一回实现了轮播器的自动滚动,但是有两个需要处理的bug. 1.增加需求:当用手拖拽控制轮播器的时候,停止自动滚动. 2.当同一个页面中有tableView,textView或scrollvie ...
- 在Service里调用AlertDialog
用常规的方法在AlertDialog的时候,会报错,大意是「can not add window in this view」. 原因是Service是没有界面的,只有Activity才能添加界面. 解 ...
- python3练习题四
循环 题目: 答案: #!/usr/bin/env python3 #-*- coding:utf-8 -*- L = ['Bart', 'Lisa', 'Adam'] for i in L: pri ...
- InstallShield 12 豪华版+破解版 下载
InstallShield 12 豪华版+破解版 下载 2009-07-09 19:18:30| 分类: 默认分类|字号 订阅 InstallShield 12 豪华版+破解版 下载 下载方 ...
- Eclipse的maven工程不小心移除了Maven Dependencies,如何添加回来?
转自:https://blog.csdn.net/eininotop/article/details/71124533 选择该工程--> 点击右键--> 选择Properties--> ...
- “玲珑杯”线上赛 Round #17 河南专场 A: Sin your life(和化积公式)
传送门 题意 略 分析 首先将sin(x)+sin(y)+sin(z)h转化成\(2*sin(\frac{x+y}2)*cos(\frac{x-y}2)+sin(z)\),而cos(z)=cos(-z ...
- POJ3468【线段树lazy操作】
上午理论AC,打到现在快吐了... 一个那么**Lazy操作打成这样,query操作和update操作都有问题,妈蛋,发现是mid<=s+1-真是蠢到家,明明是mid+1<=s卧槽连左和右 ...
- PJzhang:左耳朵耗子-陈皓
猫宁!!! 参考链接:https://coolshell.cn/haoel 左耳朵耗子原名陈皓,那个是他的网络ID,在我眼中是个值得尊敬的程序员,虽然我对他真人没什么了解. 这是他博客的自我介绍: 2 ...