関数に配列を渡す
いやー基本ですが、使わないと忘れてしまいますね。
っていうか、PHPとか何でも渡せすぎなんだよ!
C系の言語で関数に配列を渡す方法です。
関数には単純な変数しか渡せない
C系の言語は関数に単純な変数しか渡せません。
配列が渡せないのです。
じゃあどうするか。そうです、ポインタを渡します。
構造体はメモリ領域の節約だったり、そっちんが楽っていう
意味でポインタを渡しますが、配列の場合は単純に渡せないから
です。
配列名は配列の開始アドレス
例えば、
int a[10];
こんな風に宣言した配列へのポインタは
a
になります。このaには配列aの先頭のアドレスが入っています。
つまり、
int a[10]; a == *(a[0]);
ということです。
配列の要素にアクセスするにはアドレスを演算する
後は関数に渡すだけです。こんな感じです。
void main() { int a[10]; calcSum(a, 10); } void calcSum(int *dat, int num) { int i, sum; for(i = 0; i < num; i++) { sum += *(dat + i); } printf("SUM = %d", sum); }
まずは関数にポインタを渡す部分。これは単純に配列名を
渡しているだけです。
そしてcalcSum内でdat内を参照している部分。
渡されるのはポインタなので、ポインタをインクリメントすれば
その分だけ参照される変数が移動します。
こんな風にしてデータを参照します。
ただこの書き方は微妙にわかりにくいので、本当はインデックス
(サフィックスによる参照)ができるといいんですが、
どうやってやったっけなーって感じです。
ま、アクセスできているのでいいのですが。
ポインタ(pointer)
http://www.cc.kyoto-su.ac.jp/~yamada/programming/pointer.html