C言語で関数に引数として配列を渡す 質問する

C言語で関数に引数として配列を渡す 質問する

配列を引数として含む関数を作成し、次のように配列の値を渡して呼び出します。

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 の値を変更します。

歴史的な理由により、配列はファーストクラスオブジェクトではなく、値を渡すことはできません。

おすすめ記事