このコードでは:
#include<stdio.h>
int main()
{
int num[2] = {20, 30};
printf("%d", num);
printf("%d", &num[0]);
return 0;
}
私の知る限りnum
、最初のステートメントでnum
は int へのポインターであるため、両方の printf ステートメントが最初の要素のアドレスを出力します。
しかし、num
がポインタの場合、任意のアドレスも持つ必要がありますが、そのアドレスを ( でprintf("%d", &num)
) 出力すると、最初の要素のアドレスが表示されます。
2 次元配列では、全体も混乱します。
#include<stdio.h>
int main(void)
{
int num[ ] [2]={20,30,40,50};
printf("%d",*num);
return 0;
}
このプログラムは、 のアドレスである 0 番目の要素のアドレスを出力していますnum[0][0]
。しかし、なぜこれを行うのですか?それらはすべて同じアドレス (num,num[0]
およびnum[0][0]
) を持っているため、格納されている値を出力しないのはなぜですか?