(C语言)不同类型指针能够操纵的空间

各位看官可以将这段程序看成三个c语言题目,注释相当于就是解题过程了,可以自行运行下面源代码。

#include<stdio.h>

int main()
{
	int a=0x11223344;//十六进制数赋值,共8个数,每个数4位,正好32位,四个字节,一个int的大小。
	
	char* p1=(char*)&a;//将a的地址从int* 强制类型转化成 char*,然后保存在p1中。
	*p1=0;//给*p1赋值
	/*
	十六进制数打印,结果应该为11223300,因为char类型的指针一次只能访问一个字节,也就是两位。又因为整型数据存放的时候每个字节是倒着存放的
	也就是a在内存中是  44 33 22 11  这样存放的(十六进制数两个数为一个字节)
	所以p1拿到的是44的地址,所以*p1会将a改成 00 33 22 11(内存中)
	也就是a=11223300(十六进制)
	*/
	printf("%x\n",a);
	
	
	
	int b=0x11223344;
	short* p2=(short*)&b;
	*p2=0;
	/*
	与上面同理,b在内存中是 44 33 22 11,由于p2是short*类型的,所以一次可以取2个字节
	所以p2拿到的是44 33 的地址,*p2=0;后b改为 00 00 22 11(内存中);也就是b=11220000(十六进制)
	*/
	printf("%x\n",b);
	
	
	
	int c=0x11223344;
	char* p3=(char*)&c;
	*p3=16;
	*(p3+1)=32;
	
	/*
	p1一样,*p3拿到的是44的地址,将这个地址上面的值改成十进制的16,也就是十六进制的10
	*(p3+1)拿到的是33的地址,将这个地址上面的值改成十进制的32,也就是十六进制的20
	所以最终将十六进制:44 33 22 11 改成了 十六进制:10 20 33 11
	也就是c=11222010
	*/
	printf("%x\n",c);
	return 0;
}

上一篇:Pr 入门教程「33」如何在多声道音频中选择性地启用声道?


下一篇:第7章第33节:五图排版:错落有致的波浪式排版 [PowerPoint精美幻灯片实战教程]