鱼C论坛

 找回密码
 立即注册
查看: 2923|回复: 3

[已解决]函数实参形参

[复制链接]
发表于 2022-11-5 16:42:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
A.函数内部可以改变实参的值
B.函数调用时只能将实参的值赋给形参
A为什么错啊,地址传递的话,实参的值不是改变了吗
所以形参跟实参到底是单向还是双向
最佳答案
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 的地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-5 16:58:35 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-5 19:34 编辑

      出现在函数定义中的参数叫形参,调用函数时所使用的变量叫实参,调用函数的时候,实参的副本被传入函数,在函数内对形参的修改,改的也只是实参的副本,并不会改变实参本身。所以,如果想修改一个变量,就必须传递这个变量的地址而不是变量本身到函数内,这样,在函数内对变量所作的修改才能够被传递到函数的外部。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 的地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2022-11-6 11:34:35 | 显示全部楼层
求给最佳,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-20 14:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表