数组作为函数参数为什么是值传递
数组传递是双向的,值传递是单向的,那么为什么数组传递是值传递的一种。 应为你传递的根本就是个指针,你对数组的所有操作都是对这个指针指向的对象的操作,对于指针本身仍然是值传递
这段代码也许能帮助你理解#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并没有发生改变
} Croper 发表于 2020-1-18 13:06
应为你传递的根本就是个指针,你对数组的所有操作都是对这个指针指向的对象的操作,
对于指针本身仍然是值 ...
谢谢,再麻烦问一下:如果在被调函数中对形参数组元素值进行改变,主调函数中实参数组的相应元素值也会改变,这是值得特别注意的一点。这句话咋理解 松鼠呀 发表于 2020-1-19 12:01
谢谢,再麻烦问一下:如果在被调函数中对形参数组元素值进行改变,主调函数中实参数组的相应元素值也会改 ...
就是你对被调函数里边的数组形参进行操作,因为数组名实际是个指针,所以主调函数中的数组值也会改变。 那叫址传递 松鼠呀 发表于 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]