Miracle~ 发表于 2018-8-9 15:11:11

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

形参应该是不能改变实参的量,问什么fun函数里的a[]形参改变了主函数里printf函数k[]的量呢??

无符号整形 发表于 2018-8-9 15:12:28

C语言中没有实际上的数组,只有真实的指针,数组只是概念,数组只是一个指针指向一串连续的数据。

claws0n 发表于 2018-8-9 15:26:23

{:10_245:}

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

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

k 不是函数,是数组。函数是用小括号 () 的。数组是用中括号 [] 。子代码是用大括号 {} 。

关键是感觉 发表于 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;执行后t等于1
a=a,然后交换
其实就是0和下标4交换
5 2 3 4 1 6 7 8 9 10
1和下标交换1-3
5 4 3 2 1 6 7 8 9 10
结果:3 2 1 6 7 8
如果答案错了,别打我。。。{:5_104:}

会上树的猪 发表于 2018-8-10 08:39:11

形参不会改变实参的前提是传递的是实参的具体值,如果传递的是实参的地址的话形参的变化就会引发实参的变化。void fun(int a[],int n),第一个数组参数实际传值就是数组的首地址。
页: [1]
查看完整版本: 问大佬们一个关于形参 实参的问题