C语言之诡异字符串

我们来看一个例子。

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结束。

猜你喜欢

转载自blog.csdn.net/qq_25956141/article/details/79646546