配列の受け渡し
プログラム内で、添え字演算子[ ]なしで、単独で現れた配列名はその配列の先頭要素へのポインタ。
例)
ary[5] = {1, 2, 3, 4, 5}のとき、aryはary[0]を指す。
関数の引数に配列を指定するとき、仮引数はary[ ]、実引数はaryとしていた。この場合は、実引数であるaryにはaryの先頭要素(ary[0])へのポインタという意味だったのか!
そして関数内ではポインタで受け取ったものを添え字演算子[ ]で扱うことで、あたかも配列のように見せていただけ。中では完全にポインタの処理が行われていた。
Point!
関数間での配列の受け渡しは先頭要素へのポインタという形で行う。受け取る側の関数は、そのポインタに対して、添え字演算子[ ]を適用することによって、あたかも配列のように処理が行える。
というわけで、配列⇔ポインタの変換プログラムを載せておく。同じ関数を配列バージョンとポインタバージョンで作ってみた。
#include <stdio.h>
void int_set_aryver(int vc[], int no, int val){
int i;
for(i = 0; i < no; i++){
vc[i] = val;
}
}
void int_set_ptrver(int *vc, int no, int val){
int i = 0;
while(i < no){
*(vc + i) = val;
i++;
}
}
int main(void){
int i;
int array[5] = {10,20,30,40,50};
int_set_aryver(array, 5, 0);
for(i = 0; i < 5; i++){
printf("array[%d] = %d\n",i, array[i]);
}
int array2[5] = {100, 200, 300, 400, 500};
int_set_ptrver(array2, 5, 2);
for(i = 0; i < 5; i++){
printf("array2[%d] = %d\n",i, array2[i]);
}
return 0;
}