php源码学习d2 结构体联合体

一、结构体,以最大单位对齐

// 大小和顺序有关
struct s{
       char a;  //1
       int b;   //4
       long c;  //8
       void* d; //8
       int e;  //4
       char* f; //8
}s;

// 最小单位对齐
struct s{
       char a;  //1
       char b;   //1
       long c;  //8
       void* d; //8
       int e;  //4
       char* f; //8
}s;

// 此时s的大小为3
struct s{
       char a;  //1
       char b;   //1
       char c;   //1
}s;

二、联合体

union u{
    char a; 
    int b;  
    long c; 
    void* d;
    int e;  
    char* f;
}u;

三、大小端

小端 地址从大到小;

大端 地址从小到大,正常系统采用此方式。

判断机器大小端方式:

#include<stdio.h>
void func1()
{
        int i = 0x12345678;
        // 取地址,强转char *, 再取第一个字符地址
        if(*((char*)&i) == 0x12){
                printf("func1 says Big endian!\n");
        }
        else{
                printf("func1 says Little endian!\n");
        }
        return;
}
void func2()
{
        union _u{
                int i;
                char c;
        }u;
        u.i = 1;
        if(u.c == 1) {
                printf("func2 says Little endian!\n");
        }
        else{
                printf("func2 says Big endian!\n");
        }
        return;
}
int main()
{
        func1();
        func2();
        return 1;
}
四、笔记地址

d2 结构体和联合体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值