我對C中的指針進行了一些回顧,而且我遇到了一些我遇到的代碼時感到困惑。我是在做qeeksquiz.com/pointers
測驗複習,而我整個這一段代碼來:關於機器相關指針值的困惑
#include<stdio.h>
int main()
{
int a;
char *x;
x = (char *) &a;
a = 512;
x[0] = 1;
x[1] = 2;
printf("%d\n",a);
return 0;
}
,當我遇到x = (char *) &a
來到我有點糊塗了。我知道x是一個指針,它包含a的地址,但當我們指定x[0] = 1
和x[1] = 2;
時,答案在打印時爲513.答案說明它如何依賴於我們正在使用的機器以及小端機器改變它如何讀取二進制文件。我完全困惑於我們如何從512到513.我猜這是因爲x [0] = 1,但我不是100%確定。有人可以幫忙解釋一下嗎?如果我們分配了x[0] = 2
,那麼變化的值是多少?
感謝您的幫助!
INT存儲爲一個字節序列。這裏只有2個字節被初始化:然後將值計算爲x [0] + 256 * x [1] = 1 + 256 * 2 = 513.如果它是一個不同的endian機器,那麼(假設int使用2個字節,這並不總是正確的),這可能是另一種方式:x [1] + 256 * x [0] = 2 + 256 = 258。 – Ashalynd
你從哪裏獲得256乘以x [1]? – user1871869
256是2 ** 8,而8是一個字節中的位數。 – Ashalynd