| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1308 人关注过本帖
标题:形参于实参问题,希望大家指教!!
只看楼主 加入收藏
zhangyin
Rank: 2
等 级:论坛游民
帖 子:22
专家分:43
注 册:2011-10-2
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
形参于实参问题,希望大家指教!!
对于这个程序,形参和实参改如何理解
# include <stdio.h>

void f(int i)
{
    i = 99;
}

int main(void)
{
    int i = 6;
    printf("i = %d\n", i);  //这个可以理解
    f(i);
    printf("i = %d\n", i);   //这个为什么也输出6呢,为什么不是99 呢?
    return 0;
}
输出为i=6,i=6;
搜索更多相关主题的帖子: 如何 include return 
2011-10-04 12:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
形参,在f()函数定义中,是这个函数的局部变量名,相当于在main()中定义int i,在f()中也定义一个int i,但两个函数的i是完全没有关系。事实上,你可以在所有函数中都定义一个int i,它们都互不相干。这就是形参,是“形式参数”的简称,之所以是形式,是因为这仅仅是名字,不是传入的参数本身。在f()定义中,写成f(int j),对代码的实际效果没有改变,完全完全是一样的!形参的名字不重要,数据类型才重要,所以在C/C++的函数原型声明中,编译器只要f(int)就可以了,连变量名都不需要,它只校验传入的参数是不是int型。参数的数据类型,起一种叫“签名”的作用,有如中国古人的“字”,同名同姓没问题,连字都相同,那才是真的同一个人,编译器就靠这样的办法识别函数,函数名相同也没关系,f(int i)和f(double i)是两个不同的函数,它区分得出来。

真正传入函数的参数,是实参。在main()处调用函数f(i),把main()中i的当前值(此时i=6)传过去给f(),此时f()的i就被赋值为6,这是复制过去,犹如复印,值一样,但存放值的容器不一样,此时,在f()中的i干什么,与main()中的i无关。因此,f()中i即使被改为99,main()中的i是不变的,仍然是6。

复印文件,你在复印件上签字,原件上不会有你的名字。就是这个道理。

[ 本帖最后由 TonyDeng 于 2011-10-4 13:15 编辑 ]
收到的鲜花
  • zhangyin2011-10-04 15:54 送鲜花  3朵  

授人以渔,不授人以鱼。
2011-10-04 13:06
lxk115
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:121
注 册:2011-8-28
收藏
得分:0 
因为你改变的只是形参的值~~实参的值没变

行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。


2011-10-04 13:29
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
函数调用是传值,因此你的i是另外一个变量

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-10-04 14:58
zhangyin
Rank: 2
等 级:论坛游民
帖 子:22
专家分:43
注 册:2011-10-2
收藏
得分:0 
谢谢大家的指教!!!
终于明白了!
2011-10-04 16:01
快速回复:形参于实参问题,希望大家指教!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054909 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved