松鼠呀 发表于 2020-1-18 11:41:37

数组作为函数参数为什么是值传递

数组传递是双向的,值传递是单向的,那么为什么数组传递是值传递的一种。

Croper 发表于 2020-1-18 13:06:05

应为你传递的根本就是个指针,你对数组的所有操作都是对这个指针指向的对象的操作,
对于指针本身仍然是值传递

这段代码也许能帮助你理解#include <stdio.h>
int a = { 1,2,3,4 };
int b = { 5,6,7,8 };


int func(int f[]) {
        printf("调用func前f的值:");
        for (int i = 0; i < 4; ++i) {
                printf("%d ", f);
        }
        printf("\n");

        f = b;   //这才是对指针本身的操作

        printf("调用func后f的值:");
        for (int i = 0; i < 4; ++i) {
                printf("%d ", f);
        }
        printf("\n");
}

int main()
{
        int a = { 1,2,3,4 };
        printf("调用func前a的值:");
        for (int i = 0; i < 4; ++i) {
                printf("%d ", a);
        }
        printf("\n");

        func(a);

        printf("调用func后a的值:");
        for (int i = 0; i < 4; ++i) {
                printf("%d ", a);   //可以看到,a并没有发生改变
}

松鼠呀 发表于 2020-1-19 12:01:37

Croper 发表于 2020-1-18 13:06
应为你传递的根本就是个指针,你对数组的所有操作都是对这个指针指向的对象的操作,
对于指针本身仍然是值 ...

谢谢,再麻烦问一下:如果在被调函数中对形参数组元素值进行改变,主调函数中实参数组的相应元素值也会改变,这是值得特别注意的一点。这句话咋理解

howe.huang 发表于 2020-1-19 14:39:18

松鼠呀 发表于 2020-1-19 12:01
谢谢,再麻烦问一下:如果在被调函数中对形参数组元素值进行改变,主调函数中实参数组的相应元素值也会改 ...

就是你对被调函数里边的数组形参进行操作,因为数组名实际是个指针,所以主调函数中的数组值也会改变。

2技能封走位 发表于 2020-1-19 21:07:21

那叫址传递

Croper 发表于 2020-1-19 21:43:27

松鼠呀 发表于 2020-1-19 12:01
谢谢,再麻烦问一下:如果在被调函数中对形参数组元素值进行改变,主调函数中实参数组的相应元素值也会改 ...

不要空理解,上代码int func(int f[]) {
        printf("调用func前f的值:");
        for (int i = 0; i < 4; ++i) {
                printf("%d ", f);
        }
        printf("\n");

        f = 5;
        f = 6;

        printf("调用func后f的值:");
        for (int i = 0; i < 4; ++i) {
                printf("%d ", f);
        }
        printf("\n");
}

int main()
{
        int a = { 1,2,3,4 };
        printf("调用func前a的值:");
        for (int i = 0; i < 4; ++i) {
                printf("%d ", a);
        }
        printf("\n");

        func(a);

        printf("调用func后a的值:");
        for (int i = 0; i < 4; ++i) {
                printf("%d ", a);   //可以看到,a的值发生了改变
        }
}
你可以对比以下两段代码的不同
页: [1]
查看完整版本: 数组作为函数参数为什么是值传递