配列を引数として含む関数を作成し、次のように配列の値を渡して呼び出します。
void arraytest(int a[])
{
// changed the array a
a[0] = a[0] + a[1];
a[1] = a[0] - a[1];
a[0] = a[0] - a[1];
}
void main()
{
int arr[] = {1, 2};
printf("%d \t %d", arr[0], arr[1]);
arraytest(arr);
printf("\n After calling fun arr contains: %d\t %d", arr[0], arr[1]);
}
私が発見したのは、値を渡して関数を呼び出しているにもかかわらずarraytest()
、元のコピーint arr[]
が変更されているということです。
理由を説明していただけますか?
ベストアンサー1
配列をパラメータとして渡す場合、これは
void arraytest(int a[])
と全く同じ意味です
void arraytest(int *a)
だからあなたははmain の値を変更します。
歴史的な理由により、配列はファーストクラスオブジェクトではなく、値を渡すことはできません。