C语言中,值传递的问题
#include <stdio.h>
void modifyValue(int x) {
x = 10; // 修改的是x的副本,对原始数据无影响
printf("在函数中修改的结果是:%d\n",x);
}
int main() {
int a = 5;
printf("Before: %d\n", a);
modifyValue(a); // 传递a的值给modifyValue函数
printf("After: %d\n", a); // a的值仍然是5,因为modifyValue函数内修改的是x的副本
return 0;
}
C语言中值传递是函数参数传递的一种基本方式。值传递时,函数接收的是参数是一个复制的值。即两个不是同一个值,这意味着在函数内部对参数所做的任何修改都不会影响到传递给函数的原始数据。
这种值传递的场景是一个函数里面套了一个函数,这样就会产生一个局部变量的情况。
如果想要改变这个函数里的值, 经常用的方式有两种,一是使用全局变量,二是使用指针。
//使用指针传递值
#include <stdio.h>
void modifyValue(int *x) {
*x = 10; // 修改的是x的副本,对原始数据无影响
printf("在函数中修改的结果是:%d\n",*x);
}
int main() {
int a = 5;
int *p =&a;
printf("Before: %d\n", a);
modifyValue(p); // 传递副本给modifyValue函数
printf("After: %d\n", a);
return 0;
}
当时产生了一个疑问是,指针传入的时候,不也是复制的值么,为啥指针就可以改了呢。
这个是因为指针的值虽然也是复制的,但是保存在指针里的值是一样的,即两个都是指向变量的地址,不一样的是变量地址的地址。即这个指针的地址。
总结:修改一个变量,一定是修改到这个变量的本身,所以会用指针的方式来修改变量。通过传入的是变量的地址。确保一定锁定到这个变量。