Q:

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

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

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

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

A:

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

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

