跳到主要内容

为什么数组名作为参数,会改变数组的内容,而其他类型如int却不会改变变量的值?

参考答案:

这个问题涉及到C/C++等语言中的数组和函数参数传递机制。

首先,我们需要明白,在C/C++中,数组作为函数参数传递时,实际上传递的是数组的指针(即数组首元素的地址),而不是整个数组。因此,当你在函数中修改通过数组名传递的数组内容时,实际上是在修改原始数组的内容,因为指针指向的是原始数组的内存地址。

例如,以下代码:

void changeArray(int arr[], int size) {
    arr[0] = 100;
}

int main() {
    int myArray[] = {1, 2, 3, 4, 5};
    changeArray(myArray, 5);
    printf("%d\n", myArray[0]);  // 输出:100
    return 0;
}

在这个例子中,changeArray 函数接收一个整型数组 arr 和一个整型 size 作为参数。在 changeArray 函数中,我们修改了 arr[0] 的值为 100。因为 arr 实际上是指向 myArray 的指针,所以 myArray[0] 的值也被修改了。

然而,对于基本数据类型(如 int)作为函数参数,情况就不同了。在C/C++中,基本数据类型是按值传递的。也就是说,当你将一个基本数据类型的变量作为参数传递给一个函数时,实际上传递的是这个变量的一个副本,而不是原始变量本身。因此,在函数中修改这个副本的值并不会影响原始变量的值。

例如,以下代码:

void changeInt(int x) {
    x = 100;
}

int main() {
    int myInt = 5;
    changeInt(myInt);
    printf("%d\n", myInt);  // 输出:5
    return 0;
}

在这个例子中,changeInt 函数接收一个整型变量 x 作为参数。在 changeInt 函数中,我们修改了 x 的值为 100。然而,因为 xmyInt 的一个副本,所以 myInt 的值并没有被修改。

总的来说,数组名作为参数传递时,实际上传递的是数组的指针,所以修改数组的内容会影响原始数组;而其他基本数据类型作为参数传递时,传递的是变量的副本,所以修改副本的值不会影响原始变量。