| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1531 人关注过本帖
标题:小白一只,请教一个问题!
只看楼主 加入收藏
四月签儿
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-9-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
小白一只,请教一个问题!
#include<stdio.h>
void silly(int x);
int main()
{
int x,y;
x=10;
y=11;
silly(x);
silly(y);
printf("x=%d\ny=%d\n",x,y);
return 0;
}
void silly(int x)
{
x=2*x;
}
为什么这个程序运行结果是10和11而不是20和22
搜索更多相关主题的帖子: return 
2016-09-03 21:33
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:7 
不能通过形参改变一个变量的值,形参只是变量的一个拷贝,要通过调用函数的形式改变变量的值,只能通过指针。
2016-09-03 21:43
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
以下程序供参考:
#include<stdio.h>
 void silly(int *x);
 int main()
 {
 int x=10,y=11;
 int *a,*b;
 a=&x;
 b=&y;
 silly(a);
 silly(b);
 printf("x=%d\ny=%d\n",x,y);
 return 0;
 }
 void silly(int *x)
 {
 *x=2*(*x);
 }
2016-09-03 21:44
四月签儿
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-9-3
收藏
得分:0 
理解了 谢谢大神
2016-09-03 22:00
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
收藏
得分:7 
形参的改变不能影响实参的变化
2016-09-05 22:20
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:7 
我喜欢这么理解,C语言的函数调用,所传进去的东西其实只是值,在函数内部声明了几个变量,恰好和外面要传递进来的东西类型相同,然后把外面的那些值复制给了函数参数表而已。
为什么当我们要改变函数外面的数据的时候要传递他的地址进来,其实是因为复制了外面变量的地址,复制了地址,不管你这个地址拿到哪里去用,都是可以直接访问到这个地址的位置,那么我们才可以访问到外面那个变量进而修改他的值。

打个比方,变量是一个房子,这个房子有个位置叫做指针,调用函数的时候其实只是复制了一个一摸一样的房子到函数里的某个位置去,在函数里面如果你对房子就行改建,怎么改都只能是里面这个房子,改不到外面的那个。如果调用函数的时候你传递的是某个房子的地址,那么这时候函数依然只是复制了一个一模一样的地址,只不过,你可以透过这个地址找到外面那座房子进而直接修改它。


φ(゜▽゜*)♪
2016-09-06 18:55
快速回复:小白一只,请教一个问题!
数据加载中...
 
   



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

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