ページ 11

配列とポインタ

Posted: 2014年1月03日(金) 12:06
by Sera
やさしいCという書籍を購入して読み進めているのですが、その中のポインタについての部分が良く理解できません
ソースはこれです

コード:

#include <stdio.h>

double avg(int t[]);

int main(void)
{

int test[5];
int i;
double ans;

printf("5人のテストの点数を入力してください。");

for(i = 0; i < 5 ; i++){
scanf("%d",&test[i]);
}

ans = avg(test);

printf("平均点は%lfです¥n",ans);

return 0;
}

double avg(int t[])
{
int i;
double sum;

sum = 0.0;

for(i = 0;i < 5;i++){
sum += t[i];
}

return sum/5;
}
5人のテストの点数を入力して行ったところまでは理解できたのですが、
その後にあるans = avg(test);
の意味が良く理解できません(汗
配列名を実引数として渡したらなぜavg関数は5人のテストの点数(test[5])の値を知る事ができるのですか?
少し日本語が変かも知れませんが解答よろしくお願いします。

Re: 配列とポインタ

Posted: 2014年1月03日(金) 14:23
by みけCAT
配列を表す識別子は、その配列の先頭の要素へのポインタとしてポインタ型の変数に代入することができます。
そして、C言語の1次元配列の要素はメモリ上に順番に並んでいるはずなので、
先頭の要素のポインタ(=メモリ上の位置)がわかればその先の要素にもアクセスすることができます。
あとは配列の要素数がわかればその配列の要素全てに対して処理ができますが、
このプログラムでは要素数が固定なので問題ありません。
従って、実引数として配列の変数名を指定することで、その配列の要素に対して処理ができます。

なお、ソースコード上の配列名を文字列として渡しても、C言語ではその配列の中身を実行時に知ることはできないはずです。
(「C言語では」→例えばJavaScriptでevalを使えば可能)