当我们了解了整数在内存中的存储后,我们调试看一个细节:
//整形占用四个字节,就是看字节在存储的位置的高低
什么是大小端?
其实超过一个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储。
大端(存储)模式:
是指数据的低地位内容保存在内存的高地位地址,而数据的高位字节内容,保存在内容的低地址位
小端(存储)模式:
是指数据的低地位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址
例如:设计一个小程序来判断当前机器的字节序
cs
#include<stdio.h>
int main()
{
int a = 1;
if(*(char*)&a == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
cs
#include<stdio.h>
int check_sys()
{
int a=1;
return *(char*)&a;//返回第一个字节,如果是1就返回1,是0就返回0
}
int main()
{
if(check_sys() == 1)
{
printf("小端\n");//说明第一个字节是1
}
else
{
printf("大端\n");//说明最后一个字节是1
}
return 0;
}
//X86环境 小端字节序,%x是以16进制的形式进行打印
cs
#include<stdio.h>
//X86环境 小端字节序
int main()
{
int a[4]={1,2,3,4};
int *ptr1 = (int*)(&a+1);
int *ptr2 = (int*)((int)a + 1);
printf("%x,%x",ptr1[-1],*ptr2);
return 0;
}
//4 20000000