1. 程式人生 > >曾今滄海難為水,除卻巫山不是雲。

曾今滄海難為水,除卻巫山不是雲。

今天看見論壇中有人發表一段程式碼:

#include<stdio.h>
int main()
{
    int  a='abc';
    printf("%s\n",&a);
    
	return 0;
}


這段程式碼輸出cba,a=6382179,abc對應的十六進位制為ox00616263,整形儲存單元對應的ASCII碼為000 097 098 099。

若是機器為小端儲存模式(資料的地位儲存在記憶體的低地址位資料的高位儲存在記憶體的高地址位)int a對應的值在記憶體中 的儲存模式為0x63626100.

char型在記憶體中佔一個位元組,int型在記憶體中站4個位元組,將char型拓展為int型,恰好00為null所以輸出cba,若將‘abc’改為‘abcd’那麼輸出未必是dcba,因為不知道記憶體的下一個位元組是否null,直到為null停止輸出,但是若將‘abc’改為‘abcde’將會報錯,因為型別不匹配。

測試大小端:

#include<stdio.h>
int main(void)
{
	int a = 0x12345678;
	unsigned char *p=(unsigned char *)&a;
	if(0x78==*p)
	{
		printf("littleend\n");
	}
	else
	{
		printf("bigend\n");
	}
	return 0;
}