C語言之詭異字串

丶幻一發表於2018-03-21

我們來看一個例子。

int main() {
    int i = 65;
    printf((const char *)&i);
    system("pause");
    return 0;
}

你會驚訝的發現,上面列印的是字母A,然後再來看一個例子

int main(){
    int i = 4407873;
    printf((const char *)&i);
    system("puase");
    return 0;
}

你會發現列印的是ABC,那麼這些詭異是數字組成的字串是怎麼來的呢?
首先你要知道什麼是小端儲存,而int型是小端儲存,什麼是小端儲存就不介紹了,讀者可以自行百度,或者翻閱部落格。
拿65的例子來說明吧,我們將65是int型,佔4個位元組,而一個位元組佔8位,這裡將65轉換成32位下的2進位制數字為00000000000000000000000001000001,而int型是小端儲存,那麼久可以看成是10000010000000000000000000000000,然後再結合printf函式來解釋,printf函式從左往有讀取,一次讀一個位元組,所以先讀的是10000010,然後再讀到00000000,這個不就剛好是’\0’的2進位制數嗎。所以讀出來就是A,同樣的,你將4407873轉換成2進位制,以小端儲存的方式,然後再讀取,你會發現讀取的依然ABC’\0’,讀到0結束。

相關文章