C/C++中对指针和(char*)强制变换为指针类型的理解(求大小字节序)

首先我们来看一段代码:

#include<stdio.h>
int main()
{
    
    
	int a=1;
	char pc = *(char*)(&a);
	if(pc == 1)
		printf("第一个字节为1,小端存储\n");
	else
		printf("第一个字节为0,大端存储\n");
	return 0;
}

这段代码中估计很多人对 char pc =* (char*)(&a)不理解。
&a是整数型变量a(四个字节)的第一个字节的地址,(char*)是强制类型转换,&a可以看为一个地址变量,a就是一个整型数据变量,计算机内存里有存数据的也有存地址的变量,而&a就是指向a第一个字节的地址变量,两者之间是一个线性映射关系。
通常我们定义的指针类型变量,其实也可以看成地址变量,我觉得就是一个,而int和char类型的指针变量或地址变量位移不同的就是它这个地址变量映射的是一个字节还是四个字节。
理解了上面的,就知道(char*)强制类型转换,就是将&a一个指向四个字节的地址变量强制转换为指向一个字节的地址变量。

最后加上对int型变量,1在不同字节序中在存储的方式不同一个为0x00000001和0x01000000这两种,而当地址变量变为指向一个字节的变量后,就只能指向末尾两个数,那么一个是0x01,一个是0x00,这样就能判断是大还是小了。

猜你喜欢

转载自blog.csdn.net/weixin_42224577/article/details/107993183