一、结构体,以最大单位对齐
// 大小和顺序有关
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;
}
四、笔记地址