2016-05-20 9 views
-1

こんにちは私はCで構造体とポインタについて学習していました。ここで私が& tmp.z - 8を印刷しているとき、値はIamが型キャスティングして(char * & tmp.z-8)。私は型キャスティングとポインターに関するいくつかの記事を読んだが、良い理由を見つけることができなかった。値が型キャストされたときにアドレス値が異なる

struct xyz 
    { 
     int x; 
     char y; 
     double z; 
    }tmp; 

    int main() 
    { 
     printf("%p\n",&tmp.z - 8); 
     printf("%p\n",(char *)&tmp.z - 8); 
     return 0; 
    } 
+0

Googleの「ポインタ演算」またはCブックで読むことができます。多分ここで見つけられるいくつかの有益な情報:http://stackoverflow.com/questions/394767/pointer-arithmetic – Lundin

答えて

4

は、double型の変数である。

したがって、&tmp.zdoubleへのポインタを与えます。

doubleのポインタに1を引くと、前の2つの位置、つまり8個以下のアドレス(sizeof(double)が8の場合)に移動します)。 を受け取った場合、住所は64未満です。&tmp.z

キャストすると、(char *)&tmp.zに文字のポインタが表示されます。それから8を引くと、その前に8文字離れた住所、つまり1文字のサイズがあるため、8文字離れた位置に文字が表示されます。

関連する問題