struct和nuion
来源:互联网 发布:mac 的idea提示快捷键 编辑:程序博客网 时间:2024/06/05 18:36
struct
struct即结构体,是有若干成员组成的构造类型,其中包含的成员可以是基本的数据类型,也可以是结构体
用法如下:
struct Student { char name[20]; char sex[3]; char tel[11];};int main(){ struct Student stu1; strcpy(stu1.name, "张三"); strcpy(stu1.sex, "男"); strcpy(stu1.tel, "13567756443"); printf("%s %s %s", stu1.name, stu1.sex, stu1.tel); getchar(); return 0;}
struct的大小
struct的大小取决于内部所含的变量所占空间的大小
#include<stdio.h>#define MAXNAMELEN 20#define MAXSEXLEN 3typedef struct Student{ int order; int no;}STU;int main(){ STU s1; printf("%d", sizeof(s1)); getchar(); return 0; }
运行结果:
可以看出结构体的大小取决于内部变量 一个整形4个字节两个整形正好8个字节
struct的空间的自动对齐
虽然struct的大小取决于内部变量的大小,但并不是单纯的将内部所有变量所占内存简单相加。
#include<stdio.h>#define MAXNAMELEN 20#define MAXSEXLEN 3typedef struct Student{ int order; int no; char name[MAXNAMELEN]; char sex[MAXSEXLEN];}STU;int main(){ STU s1; printf("%d", sizeof(s1)); getchar(); return 0; }
可以看出如果直接用结构体内变量所占空间直接相加应该是31,而实际上却是32。这是在c语言当中一次读取32位也就是4字节速度是最快的,所以如果结构体的大小不是4的倍数的话就会自动补齐。
nuion
和struct类似,只不过它内部变量共享空间,所以的大小取决于它内部最大变量所占的空间
#include <stdio.h>typedef union MyUnion{ int n; char c;}node;int main(){ node union1; printf("sizeof(union1)=%d", sizeof(union1)); union1.n = 10; printf("\n n=%d\n c=%d", union1.n, union1.c); getchar(); return 0;}
可以看出union的大小等于内部所占空间最大的变量int n的大小,
输出结果n和c都有值且都为10,这是为什么呢?
前面提到过union内部的变量是共享的空间的:
在此union内部空间是按照int n 的大小分配的,而c则是共享了它的内存空间,通过c也可以访问到n的内存空间,所以在对n赋值后c的值会因n的内存中所存数据的变化而变化。
对于小端机来说,因为数据是从低地址到高地址存储的,所以会出现给n赋值10,c也正好指向刚赋值的那块内存的情况,而且现在基本都是小端机。
0 0
- struct和nuion
- struct和nuion、类的补齐规则,以及sizeof求大小
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- struct 和 typedef struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- typedef struct和struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- 区间DP
- 解决Android Studio启动模拟器的问题
- MySQL索引
- 查杀worm病毒,恢复U盘文件
- 数据库怎样把一个表的数据插入到另一个表
- struct和nuion
- 什么叫做生成树 Prim
- Android事件分发机制完全解析(上)
- Android Studio 导出APK
- 马跑日算法
- 十进制小数转二进制
- 1727 洪水拯救计划
- ffmpeg 编译环境搭建(ffmpeg-3.2)
- dispatchTouchEvent(),onTouchEvent(MotionEvent event),onInterceptTouchEvent(MotionEvent event)的事件处理