结构与union

结构内的成员之间是否连续,相邻的成员的地址的差是否等于对应的成员的sizeof???

不同的成员变量组合,结构的sizeof如何,是否正好等于全部成员的sizeof之和?

no, 不同的数据类型间,地址不完全连续,而且结构的sizeof也不等于各个成员数据类型相加,结构会稍大些;而相同的数据类型是则地址连续且结构数据大小等于各个相同成员数据大小之和;

struct student
{
    char name[5];
    char gender;
    int age;
    float height;
};
struct student s1 = {
        "lucly", 'M', 23, 170.1f
    }; 

按上面的代码定义数组感觉,每次都要写struct,好麻烦哦,所以这样定义也许更好:

typedef struct studentProperty  
{
    char name[5];
    char gender;
    int age;
    float height;
}student;
//so we can define a variable of struct student like:
student s1;
// just like typedef int key, key represent int property

union

#include <stdio.h>

typedef union 
{
    int i;
    char ch[sizeof(int)];
}CHI;

int main(int argc, const char *argv[])
{
    CHI chi;
    int i;
    chi.i = 4321;   // 10E1
    for (i = 0; i < sizeof(int); i++) 
    {
        printf("%02hhX", chi.ch[i]);
    } 
    printf("\n");
    return 0;
} 

运行结果:FF E1 10 0000  // chi.i = (4321)D  ---> (10E1)H
这就涉及到现在的cpu大部分是x86的,而我们一般电脑存储数据是小端,即E1在前,10在后;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值