将数组作为参数传递给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[]都变了。

你能解释一下为什么吗?


慕后森
浏览 1097回答 3
3回答

慕妹3242003

将数组作为参数传递时,void arraytest(int a[])意味着与void arraytest(int *a)所以你是修改main中的值。由于历史原因,数组不是一流的公民,不能按值传递。

森林海

在C中,除了少数特殊情况外,数组引用总是“衰变”到指向数组的第一个元素的指针。因此,不可能“按值”传递数组。函数调用中的数组将作为指针传递给函数,这类似于通过引用传递数组。编辑:有三个这样的特殊情况,数组不会衰减到指向其第一个元素的指针:sizeof a与sizeof (&a[0]).&a与&(&a[0])(与&a[0]).char b[] = "foo"与char b[] = &("foo").

海绵宝宝撒

如果你想将一维数组作为函数中的参数传递。,您必须以下列三种方式之一声明一个正式参数,而这三个声明方法都会产生类似的结果,因为每个方法告诉编译器将收到一个整数指针。.int func(int arr[], ...){     .     .     .}int func(int arr[SIZE], ...){     .     .     .}int func(int* arr, ...){     .     .     .}因此,您正在修改原始值。
打开App,查看更多内容
随时随地看视频慕课网APP