h-b-z-d-j-s-m 发表于 2022-11-5 16:42:06

函数实参形参

A.函数内部可以改变实参的值
B.函数调用时只能将实参的值赋给形参
A为什么错啊,地址传递的话,实参的值不是改变了吗
所以形参跟实参到底是单向还是双向

jackz007 发表于 2022-11-5 16:58:35

本帖最后由 jackz007 于 2022-11-5 19:34 编辑

      出现在函数定义中的参数叫形参,调用函数时所使用的变量叫实参,调用函数的时候,实参的副本被传入函数,在函数内对形参的修改,改的也只是实参的副本,并不会改变实参本身。所以,如果想修改一个变量,就必须传递这个变量的地址而不是变量本身到函数内,这样,在函数内对变量所作的修改才能够被传递到函数的外部。

zhangjinxuan 发表于 2022-11-5 19:10:58

指针和变量的本质是完全不一样的
比如你定义了一个函数 fun
void fun(int * a) {
    ;
}
虽然你可以通过解引用来改变 *a 的数值,就像这样:
void fun(int * a) {
    *a = 114514;
}
但是,a 的地址有没有改变呢?
你无法改变 a 的实际地址,即使这样,也不能改变实参:
void fun(int * a) {
    a = NULL;
}
a 和 *a 不是一个东西哦,所以,你是不可能在函数中改变实参的值
再或者,你想一想, a的值是什么?*a的值又是什么?
a,很明显,是一个指针,是一个地址,但是 *a,则是一个int变量的值。
你无法改变实参的值,也就不能改变 a 的地址。

zhangjinxuan 发表于 2022-11-6 11:34:35

求给最佳,感谢{:10_254:}
页: [1]
查看完整版本: 函数实参形参