您的位置:首页 > 其它

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); //??
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: