鱼C论坛

 找回密码
 立即注册
查看: 2576|回复: 5

问大佬们一个关于形参 实参的问题

[复制链接]
发表于 2018-8-9 15:11:11 | 显示全部楼层 |阅读模式

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

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

x
形参应该是不能改变实参的量,问什么fun函数里的a[]形参改变了主函数里printf函数k[]的量呢??
`L]CRSR[4O9DK_WLX]@~%AG.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-9 15:12:28 | 显示全部楼层
C语言中没有实际上的数组,只有真实的指针,数组只是概念,数组只是一个指针指向一串连续的数据。

点评

也就是说 你传进去的是指针  发表于 2018-8-9 16:04
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-9 15:26:23 | 显示全部楼层


void fun(int a[], int n) {...}   //这里是形参。形参是在定义的时候出现的,定义完了就不要管他

main()
{
fun(k,5);      // 这里是实参呀~~~
}

k[10] 不是函数,是数组。函数是用小括号 () 的。数组是用中括号 [] 。子代码是用大括号 {} 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-8-10 00:55:42 | 显示全部楼层
第一点:其实没有实参和形参,(虽然很多书都这样去描述,但是在本质上,他们都是值的拷贝)。看翁恺C语言有说
第二点:我也不知道这些题那些高手出的,挺折腾人的。
说下解题过程
for(i=0;i<n/2;i++)  //   n/2可以看成5/2 结果为2
for(i=0;i<2;i++)   // 共循环2次
1 2 3 4 5 6 7 8 9 10
t=a[0];执行后t等于1
a[0]=a[5-1-0],然后交换
其实就是0和下标4交换
5 2 3 4 1 6 7 8 9 10
1和[5-1-1]下标交换1-3
5 4 3 2 1 6 7 8 9 10
结果:3 2 1 6 7 8
如果答案错了,别打我。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-10 08:39:11 | 显示全部楼层
形参不会改变实参的前提是传递的是实参的具体值,如果传递的是实参的地址的话形参的变化就会引发实参的变化。void fun(int a[],int n),第一个数组参数实际传值就是数组的首地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-30 04:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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