#include <stdio.h>
void func(int arg[]) ; //プロトタイプ宣言
int main()
{
int a[] = //配列の宣言
{
0, 1, 2, 3, 4 //初期化している
} ;
int count ;
for (count = 0 ; count < 5 ; count ++)
{ //配列の中身を画面に出力
printf("%d ", a[count]) ;
}
printf("\n") ; //たんに改行している
func(a) ; //関数に配列を渡している
for (count = 0 ; count < 5 ; count ++)
{ //配列の中身を再度画面に出力
printf("%d ", a[count]) ;
}
}
void func(int arg[])
{
arg[0] = 10 ;
printf("呼ばれた関数では配列の0番目は%d\n", arg[0]) ;
}
func(a) ; これは配列aのアドレスを渡すということですが、
void func(int arg[])
配列argの型はintと定義されているのに、そこにint型配列aのアドレスを渡す、この2つは違うものでつながりが見えなくなってしまうのですが?
ちなみに配列aの先頭アドレスは私のPCでは642296(10進数)と出て来ました。
ちなみに
#include <stdio.h>
void increment(int *p) //ポインタ変数に格納されている「場所」が渡される
{
(*p)++ ; //「場所」の中の値をインクリメントしている
}
int main()
{
int num ;
num = 10 ; //通常の変数に10を代入している
increment(&num) ; //インクリメント関数に、変数の「場所」を渡す
printf("num=%d", num) ; //11が表示される
}
(int *p)これはint型の変数のアドレスを入れるポインタ変数p, p = &numとして流れが分かるのですが
上記の例で言うとarg[] = a[] になる筈ですが、(int arg[])
にa[]のアドレス642296を渡すと何故arg[] = a[] になるのか?arg[642296]ではないだろうし、強引に配列argの最初のアドレスは642296だ、と言うということでしょうか?
しかしどうしたらそう言えるのか分かりません。
すいません、頭がごちゃごちゃしていて説明しにくいです。