06-struct.union
2015-05-26 10:39
176 查看
struct
空结构体占多大内存
struct D{
};
int main(){
struct D d1;
struct D d2;
printf("%d\n", sizeof(struct D));
printf("%d, %0x\n", sizeof(d1), &d1);
printf("%d, %0x\n", sizeof(d2), &d2);
return 0;
}
gcc编译器将空结构体大小定义为0 //两个不同的变量有着相同的地址
g++编译器将空结构体大小定义为1,不会有两个具有相同地址的变量;
由结构体产生柔性数组
柔性数组即数组大小待定的数组
C语言中结构体的最后一个元素可以是大小未知的数组
C语言中可以由结构体产生柔性数组
struct soft_array{
int len;
int array[];
}
union和struct的区别
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)); //12
printf("%d\n", sizeof(union B)); //4
return 0;
}
union的使用受系统大小端的影响
+----------------------+
| 大端模式 |
| int i = 1; |
| 0x1 0x0 0x0 0x0 |
|----------------------|
| 高地址 低地址 |
+----------------------+
+----------------------+
| 小端模式 |
| int i = 1; |
| 0x0 0x0 0x0 0x1 |
|----------------------|
| 高地址 低地址 |
+----------------------+
union C{
int i;
char c;
};
union C c;
c.i = 1;
printf("%d\n", c.c); //??
空结构体占多大内存
struct D{
};
int main(){
struct D d1;
struct D d2;
printf("%d\n", sizeof(struct D));
printf("%d, %0x\n", sizeof(d1), &d1);
printf("%d, %0x\n", sizeof(d2), &d2);
return 0;
}
gcc编译器将空结构体大小定义为0 //两个不同的变量有着相同的地址
g++编译器将空结构体大小定义为1,不会有两个具有相同地址的变量;
由结构体产生柔性数组
柔性数组即数组大小待定的数组
C语言中结构体的最后一个元素可以是大小未知的数组
C语言中可以由结构体产生柔性数组
struct soft_array{
int len;
int array[];
}
union和struct的区别
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)); //12
printf("%d\n", sizeof(union B)); //4
return 0;
}
union的使用受系统大小端的影响
+----------------------+
| 大端模式 |
| int i = 1; |
| 0x1 0x0 0x0 0x0 |
|----------------------|
| 高地址 低地址 |
+----------------------+
+----------------------+
| 小端模式 |
| int i = 1; |
| 0x0 0x0 0x0 0x1 |
|----------------------|
| 高地址 低地址 |
+----------------------+
union C{
int i;
char c;
};
union C c;
c.i = 1;
printf("%d\n", c.c); //??
相关文章推荐
- struct、union
- Struct和Union的区别
- struct/class/union内存对齐原则
- Struct 和 Union区别 以及 对内存对齐方式的说明
- Union和Struct的内存分配
- C语言中union与struct的区别及sizeof的计算方式
- union 和 struct | from web
- 关于C与C++的struct,union,enum用法差异
- struct,union
- 转载:关于sizeof对struct和union的处理
- c/c++ struct union 对齐方式
- union和struct对齐大小问题
- struct和union
- union和struct的大小计算
- struct和union分析
- c语言中的结构(struct)和联合(union)简介
- 关于union和struct的内存分配
- JAVA 与C语言中struct union 字节流转换方案 Javolution
- 探索struct & union 存储方式
- Union与Struct的区别