ポインタの何が混乱を引き起こすのか自分の経験を思い出してみた

大学の授業で初めてポインタを習ったときはこのように習ったと思う。

#include <stdio.h>
 
int main(void) {
    int num = 1;
    int *p;

    p = &num;

    printf("int型変数numのアドレス:%p\n", p);
    printf("int型変数numのアドレス先の値:%d\n", *p);
}

ポインタの宣言時にとpがくっついていて、pで一つの変数のように見える。 そして、ポインタの先を参照するときに「*p」と書くが、宣言した変数としか思えないのに、全く違うものと説明されても意味がわからず、混乱していたのでプログラムなんか二度とやるかと思っていた。

C99ではint pと宣言できるのだから、これで宣言して教えてほしかった。 これならば、pが別物であるということがよく分かる。