0

私のマシンは centos システムを実行する 32 ビット PC で、GCC を使用して C コードをコンパイルしました。そして、int 変数は 4 バイトを占有するので、このようなコードを書きました...

    #include "stdio.h"
    int main(){
           int a=1;
           printf("%c",*(&a+1)+65);
           printf("%c",*(&a+2)+65);
           printf("%c",*(&a+3)+65);
    } 

私はこのように考えていました:PCは32ビットなので、変数は次のようにメモリに格納する必要があります:

   &a    00000001
   &a+1  00000000
   &a+2  00000000
   &a+3  00000000

だから私は答えが :AAA であるべきだと思い
ます
。さらに、最後の2つのprintf.を消化すると、次のようになります。

    #include "stdio.h"
    int main(){
           int a=1;
           printf("%c",*(&a+1)+65);
    }

それから私は私が欲しいものを手に入れました:A
私のコードに何か問題があるのでしょうか;本当に間違っているのは、変数をメモリに格納することについての私の考えです...私を助けてください、ありがとう。

4

3 に答える 3

0

このようにポインター&aをポインターにキャストしますchar *

printf("%c",*((char*)&a+1)+65);

&a + 1aのアドレスを1* のサイズでインクリメントしたことを意味しa、a のサイズは 4 バイト = 4 * char のサイズです。

aのアドレスをポインタにキャストすると、のアドレスを 1 * sizeof char (=1 バイト)char *でインクリメントできます。a

于 2013-04-18T10:05:39.533 に答える