c笔记
今天见到一个新程序,刚好有些思考,在此做一些记录。程序:
#include<stdio.h>
int main()
{
int a[]={384,385,386};
char* p=( char*)a;
printf("%p\n", p);
printf("%p\n", a);
printf("%d\n", *p);
printf("%d\n", *( p+1));
printf("%d\n", *( p+4));
return 0;
}
运行的结果为

解释:c语言中,基本数据类型都以整数的补码的形式存储,遵循低位在前,高位在后的原则。384的补码为1 1000 0000,硬盘上存储为:1000 0000(第一字节),0000 0001(第二字节),0000 0000(第三字节),0000 0000(第四字节)因此程序中通过类型强制转换,p所指向的值就是384补码的第一个字节,即1000 000,转换为十进制即128,p+1的指向结果为0000 0001,即为1,p+4则指向385补码的低八位。
其他的照此分析,主要是弄清楚数据的存储方式以及不同数据类型所占的存储空间的区别。