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 结构体和联合体

猜你喜欢

转载自blog.csdn.net/smile12393/article/details/88621463
今日推荐