c語言scanf輸入數(shù)組 C語言中為什么將數(shù)組(數(shù)組內(nèi)都是數(shù)字)以字符串格式輸出會(huì)打印出中文?
C語言中為什么將數(shù)組(數(shù)組內(nèi)都是數(shù)字)以字符串格式輸出會(huì)打印出中文?這個(gè)問題涉及字符編碼和數(shù)組存儲(chǔ)機(jī)制。讓我們用一個(gè)例子來解釋。首先,讓我們看看下面的簡單程序及其運(yùn)行結(jié)果,如下圖所示:首先,我們定義了
C語言中為什么將數(shù)組(數(shù)組內(nèi)都是數(shù)字)以字符串格式輸出會(huì)打印出中文?
這個(gè)問題涉及字符編碼和數(shù)組存儲(chǔ)機(jī)制。讓我們用一個(gè)例子來解釋。首先,讓我們看看下面的簡單程序及其運(yùn)行結(jié)果,如下圖所示:
首先,我們定義了兩個(gè)數(shù)組STR1和STR2,一個(gè)用漢字初始化,另一個(gè)用字節(jié)數(shù)方式初始化,如第11行所示。表面上看,這兩個(gè)陣列是完全不同的。讓我們以不同的方式輸出它們的內(nèi)容。首先,分別在第13行和第14行以字符串的形式輸出它們的內(nèi)容。右邊的程序執(zhí)行結(jié)果顯示,它們輸出的內(nèi)容相同——?dú)g迎來到西安。此外,我們還定義了一個(gè)數(shù)組Arr1并通過數(shù)字為其賦值。代碼是12行。在15行中,我們將Arr1轉(zhuǎn)換為字符串并輸出其內(nèi)容。我們也得到了同樣的結(jié)果。接下來,我們以數(shù)字方式輸出STR1、STR2和pstr3的內(nèi)容。見本準(zhǔn)則第17-28行。在右邊的輸出結(jié)果中,我們可以看到相同的內(nèi)容以三種方式輸出。
從上面的程序可以看出,雖然數(shù)組以不同的方式初始化和分配,但是使用相同的輸出方法將獲得相同的輸出結(jié)果??梢娝鼈兊膶?shí)質(zhì)是一樣的。
為什么會(huì)這樣?它涉及到字符的存儲(chǔ)。我們知道,計(jì)算機(jī)內(nèi)部的數(shù)據(jù)是由0和1組成的二進(jìn)制數(shù)。為了表示字符,我們需要對它們進(jìn)行編碼。因?yàn)橛?jì)算機(jī)技術(shù)最初是從美國發(fā)展起來的,原來的ASCII編碼只包括英文字母、數(shù)字和控制字符,總共256個(gè)字符。后來,隨著計(jì)算機(jī)的發(fā)展,應(yīng)用越來越廣泛,其他國家為了使計(jì)算機(jī)能夠處理自己的語言,他們發(fā)明了很多其他的編碼方法,各種編碼方法之間存在著嚴(yán)重的兼容性問題,所以為了統(tǒng)一,后來人們提出了Unicode編碼。在這種編碼模式下,每個(gè)漢字存儲(chǔ)在兩個(gè)字節(jié)中。如果輸出為字符串,將顯示字符的內(nèi)容。如果輸出為數(shù)字,則顯示其編碼。
目前,大多數(shù)現(xiàn)代編譯器開始使用Unicode編碼字符串。例如,當(dāng)我使用vs2017時(shí),數(shù)組內(nèi)容是數(shù)字,但可以輸出中文字符。如果用一些舊的編譯器替換相同的代碼,可能無法輸出漢字,但會(huì)輸出一些亂七八糟的代碼。