C言語今更再認識: ポンタの足し算 | 技術日誌

技術日誌

ここでは,電子工作,木工などの趣味での記録を書いています。
なお当初はKMK研究所のメインテーマであるSPSのノウハウを書いてきましたが,順次SPSノウハウのページに複製を作っていきます。

 ポインタとは,変数のアドレスを記憶する変数です(BASICを知っている程度の人に話しているスタンスです。あしからず)。下のプログラムでは,aにi[0]のアドレスを代入(a=i ・・・→ a=&i[0]と同じ)後,3を足したものをbに代入しています(b=a+3)。そして,aとbの値を書き出しています。その結果,a=4520980,b=4520992となりました。bはaより12大きいです。3を足しただけなのに。そして,b-aを書き出しています。差は3で,足した値に一致します。bはaより3だけ大きいのではなく12だけ大きいという不思議なことが起こっています。その理由は,3を足すとi[3]のアドレスを示す(ポイントする)ようにする仕掛けになっているからです。

    int i[10];

    int *a,*b;

    a=i;

    b=a+3;

    printf("a=%d  b=%d\n",a,b);

    printf("b-a=%d\n",b-a);

    printf("Enter-key!");getchar();