仿照選題一中的**,定義乙個整型數/短整型陣列,應該如何實現?對如下**你預估的執行結果是什麼? 實際gcc 中執行結果是什麼?請解析。
#include
intmain()
;char b[6]
=;int c[2]
=;printf
("%d,%d\n"
,sizeof
(char),
sizeof
(int))
;printf
("%s\n"
,a);
printf
("%s\n"
,b);
printf
("%s\n"
,c);
return0;
}
#include
intmain()
;int b[3]
=;short c[6]
=;printf
("%d\n"
,sizeof
(float))
;printf
("%s\n"
,a);
printf
("%s\n"
,b);
printf
("%s\n"
,c);
return0;
}
輸出結果:
4
hello world
hello world
hello world
預估輸出:
1,4
hnuer
hnuer
hnuer
實際輸出
1,4
hnuer
hnuer
eunh
根據對**一的粗略了解,知道了用%s格式輸出陣列,將按照讀取字串的方式,每次讀取乙個char長度即1位元組的長度。因此要分析輸出結果,需要求出對應的c陣列的二進位制位。
將這些數轉化成對應的char
型別
(72<<24)+(78<<16)+(85<<8)+101
// 第乙個數
1213093221
// 轉化為十進位制數字
0100 1000 0100 1110 0101 0101 0110 0101
// 轉化為二進位制數
114<<24
// 第二個數
1912602624
// 轉化為十進位制數字
0111 0010 0000 0000 0000 0000 0000 0000
// 轉化為二進位制數
然後逐一分析每個byte。
分析結果是這樣的
0100 1000 0100 1110 0101 0101 0110 0101
0100 1000 the decimalism is 72, the char is h
0100 1110 the decimalism is 78, the char is n
0101 0101 the decimalism is 85, the char is u
0110 0101 the decimalism is 101, the char is e
0111 0010 0000 0000 0000 0000 0000 0000
0111 0010 the decimalism is 114, the char is r
0000 0000 the decimalism is 0, the char is
0000 0000 the decimalism is 0, the char is
0000 0000 the decimalism is 0, the char is
decimalism
的意思是十進位制。
也就是說,int陣列c如果按位轉化為char*字串,那麼輸出應該和前面幾個一樣,為hnuer
才是,為什麼會反而輸出的是eunh
。
原來,在計算機中,有種叫做位元組序的東西。
位元組順序,又稱端序或尾序(英語:endianness),在電腦科學領域中,指儲存器中或在數字通訊鏈路中,組成多位元組的字的位元組的排列順序。
在幾乎所有的機器上,多位元組物件都被儲存為連續的位元組序列。例如在c語言中,乙個型別為int的變數x位址為0x100,那麼其對應位址表示式&x的值為0x100。且x的四個位元組將被儲存在儲存器的0x100, 0x101, 0x102, 0x103位置。
位元組的排列方式有兩個通用規則。例如,乙個多位的整數,按照儲存位址從低到高排序的位元組中,如果該整數的最低有效位元組(類似於最低有效位)在最高有效位元組的前面,則稱小端序;反之則稱大端序。在網路應用中,位元組序是乙個必須被考慮的因素,因為不同機器型別可能採用不同標準的位元組序,所以均按照網路標準轉化。
例如假設上述變數x型別為int,位於位址0x100處,它的十六進製制為0x01234567,位址範圍為0x100~0x103位元組,其內部排列順序依賴於機器的型別。大端法從首位開始將是:0x100: 01, 0x101: 23,…。而小端法將是:0x100: 67, 0x101: 45,…。舉個栗子—引自維基百科
對於乙個型別為int,位於位址0x100處,它的十六進製制為0x12345678,位址範圍為0x100~0x103位元組的變數,它的大端序是這樣的:
縱向看
橫向看
而小端序是這樣的:
橫向看:
因此,我以為會輸出hnuer
,是因為我誤把輸出字元的順序當成了從高位先輸出。而實際上,在我的計算機上,字元儲存的是位元組序是小端序。
從低位往高位讀的話,它是讀出eunh
,遇到第乙個』\0』中止。 如下圖:
如果是大端序的話
從低位往高位讀,剛好就是hnuer。如下圖:
字元陣列與字串,字元陣列與字元指標(總結大全)
1.誤區 字元陣列就是字串 來自 字元陣列,完整地說叫字元型別的陣列。字元陣列不一定是字串。字串是最後乙個字元為null字元的字元陣列。字串一定是字元陣列。字元陣列的長度是固定的,其中的任何乙個字元都可以為null字元。字串只能以null結尾,其後的字元便不屬於該字串。strlen 等字串函式對字串...
整型陣列宣告與定義
當宣告陣列int arr 9 定義陣列,輸入資料截止到下標arr 6 系統自動給arr 7 arr 8 賦值為 任意值 int x 輸入資料 int i 0 記錄位數 int a 5 儲存逆序 int temp printf 輸入資料x scanf d x while x 100000 x 0 輸出...
jQuery輸出陣列以隨機順序
只是一些jquery片段的共享,以便以隨機順序顯示 排序事物。以物件字面量格式使用此功能。shuffleads function arr 演示 另乙個功能做同樣的事情。function randsort c return o 還認為這個jquery shuffle外掛程式值得包括在內。jquery ...