[C言語] ポインタの概念 その2 メモリ番地他 C89

前回の続きです。

xとyのアドレスが模式図の通りになっているか、以下のコードでそれぞれのアドレスを確認しました。

xのアドレスと*ipのアドレスは同じで図の正しいことが分かりました。yについてはポインタ変数はありませんが、4バイト若い番地が割り当てられています。

intのメモリ領域は4バイトなのでxとyは隙間なく並んでいます。気になることが一点。変数宣言はxが先なのになぜアドレスは後ろなのでしょう。*ipなしで宣言だけしても番地は変わらずでした。

#include <stdio.h>;

main()
{
int x = 1,y= 2;
int *ip;

    ip =&x;
    y = *ip;
    *ip = 0;

    printf("xのアドレス %p\n",&x);
    printf("yのアドレス %p\n",&y);
    printf("*ipのアドレス %p\n",ip);
}
--------------------------------------------------

出力
--------------------------------------------------
xのアドレス 0x7ffee4de267c
yのアドレス 0x7ffee4de2678
*ipのアドレス 0x7ffee4de267c

また、ISOのC90で禁止されているコード途中の変数宣言やC99から導入されたスラッシュ2つでのコメントアウトを試してみました。エラーにはなりませんでしたが、どちらにも警告がありました。

#include <stdio.h>;
#include <stdlib.h>;

main()
{
int x = 1,y= 2;
int *ip;

    ip =&x;
    y = *ip;
    *ip = 0;

    printf("xのアドレス %p\n",&x);
    printf("yのアドレス %p\n",&y);
    printf("*ipのアドレス %p\n\n",ip);

int* ipy; // ポインタの宣言

    ipy = &y;

    printf("yのアドレス %p\n",&y);
    printf("*ipyのアドレス %p\n",ipy);

}
--------------------------------------------------

出力
--------------------------------------------------
<警告内容のみ>
warning: ISO C90 forbids mixing declarations and code

warning: // comments are not allowed in this language