2次元配列へのポインタによるアドレス表示について
Posted: 2016年8月15日(月) 19:35
C初心者です。
下記コードにおいてポインタ変数pを介して2次元配列の先頭要素アドレスを表示しています。
このうち pとp[0] が同じアドレスになるのは理解できますが *pと&p[0]も同様のアドレスを
表示しています。何故そうなるのかが分かりません。どのような考え方をすればよろしいのでしょうか?
ご教授お願いします。
-----ここから-----------------------------------
#include<stdio.h>
int main()
{
int x[5][5];
int i, j;
int(*p)[5];
p = x;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++)
x[j] = (j+1)+(i*5);
}
printf("%p\n",p);
printf("%p\n", p[0]);
printf("%p\n", *p);
printf("%p\n", &p[0]);
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++)
printf("%3d", p[j]);
printf("\n");
}
return 0;
}
下記コードにおいてポインタ変数pを介して2次元配列の先頭要素アドレスを表示しています。
このうち pとp[0] が同じアドレスになるのは理解できますが *pと&p[0]も同様のアドレスを
表示しています。何故そうなるのかが分かりません。どのような考え方をすればよろしいのでしょうか?
ご教授お願いします。
-----ここから-----------------------------------
#include<stdio.h>
int main()
{
int x[5][5];
int i, j;
int(*p)[5];
p = x;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++)
x[j] = (j+1)+(i*5);
}
printf("%p\n",p);
printf("%p\n", p[0]);
printf("%p\n", *p);
printf("%p\n", &p[0]);
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++)
printf("%3d", p[j]);
printf("\n");
}
return 0;
}