0

私は 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] = 1x[1] = 2;答えが印刷されて 513 になります。答えは、使用しているマシンにどのように依存するか、リトルエンディアン マシンがどのように変化するかについて述べています。バイナリで a を読み取る方法。どうやって 512 から 513 になるのか完全に混乱しています。おそらく x[0] = 1 が原因だと思いますが、100% 確実ではありません。誰かがこれを説明するのを助けることができますか? を割り当てx[0] = 2た場合、a の値は何に変化しますか?

助けてくれてありがとう!

4

4 に答える 4