前回の続きです。
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