ポインタがさす先の中身を表示する方法

投稿者: Anonymous

ポインタが指すint型の値(aの中身:3)をpaを使って表示することができません。どうすればいいのでしょうか?実行結果の一番最後が3になるとおもっていたのですが。。

int main(void)
{
    int a;

    a = 3;
    printf("a %p %dn", &a, a);
    
    int *pa = &a;
    printf("a %p %d : %p %dn", &pa, &pa, pa, pa);  
}

実行結果

a 0x7ffe4308e9ec 3
a 0x7ffe4308e9f0 1124657648 : 0x7ffe4308e9ec **1124657644** //←ここがaの中身3になると思った。

解決

ポインタ変数int *pdが指している中身のデータには、*pdとしてアクセスできます。printf%p%dは単に表現の仕方(アドレスとしてか、整数としてか)を指定するだけなので、それによって数値が変化することはありません。

int main(void)
{
    int a; 
    a = 3;

    printf("a %p %dn", &a, a);
    
    int *pa = &a;
    
    printf("%dn",  pa); //=> 0x7ffe4308e9ec (ポインタ変数*paに格納されている、aが存在するアドレス)
    printf("%dn", &pa); //=> 0x7ffe4308e9f0 (ポインタ変数*paが存在するアドレス)    
    printf("%dn", *pa); //=> 3
    
    return 0;
}
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *