c筆記
今天見到一個(gè)新程序,剛好有些思考,在此做一些記錄。程序:
#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;
}
運(yùn)行的結(jié)果為

解釋:c語言中,基本數(shù)據(jù)類型都以整數(shù)的補(bǔ)碼的形式存儲,遵循低位在前,高位在后的原則。384的補(bǔ)碼為1 1000 0000,硬盤上存儲為:1000? 0000(第一字節(jié)),0000 0001(第二字節(jié)),0000 0000(第三字節(jié)),0000 0000(第四字節(jié))因此程序中通過類型強(qiáng)制轉(zhuǎn)換,p所指向的值就是384補(bǔ)碼的第一個(gè)字節(jié),即1000 000,轉(zhuǎn)換為十進(jìn)制即128,p+1的指向結(jié)果為0000 0001,即為1,p+4則指向385補(bǔ)碼的低八位。
其他的照此分析,主要是弄清楚數(shù)據(jù)的存儲方式以及不同數(shù)據(jù)類型所占的存儲空間的區(qū)別。
標(biāo)簽: