Chinaunix
标题:
新手请教关于函数的参数问题?
[打印本页]
作者:
sfrost
时间:
2011-05-13 11:59
标题:
新手请教关于函数的参数问题?
最近在看网上到处都有的免费C学习资料《Linux C编程一站式学习》,现在遇到一个习题,网上搜了一下别人作的,和自己的结论不一样,烦请高手指教一下,习题如下:
1、定义一个函数increment,它的作用是把传进来的参数加1。例如:
void increment(int x)
{
x = x + 1;
}
int main(void)
{
int i = 1, j = 2;
increment(i); /* i now becomes 2 */
increment(j); /* j now becomes 3 */
return 0;
}
复制代码
我们在main函数中调用increment增加变量i和j的值,这样能奏效吗?为什么?
我的回答:
increment函数不会增加变量i和j的值,也就是说变量i和j的值不会有任何改变。
在我有限的编程经验中是这样理解这个例子的:声明的函数increment中的参数x是个形参,在将变量i/j传递给函数increment的时候仅仅是将i/j的数值(实参)复制给参数i,increment函数修改的实际上是变量x所存放的内存地址,改变的是x这个变量的值。
我不知道这样理解是否正确,因为我记得VB(还是PHP?)中会有声明实参和形参两种,而这两种的区别就在于传递参数的时候,是传递值,还是传递内存地址,如果只是值传递,那么原始的变量将不受影响,如果是内存地址传递,那么由于原始的变量也指向的是同一个地址,所以也会被改变。
作者:
egmkang
时间:
2011-05-13 12:01
你还是去买一本C程序设计语言吧,200来页,二十来块钱,不缺那么一点钱
作者:
nizvoo
时间:
2011-05-13 12:06
最近在看网上到处都有的免费C学习资料《Linux C编程一站式学习》,现在遇到一个习题,网上搜了一下别人作的 ...
sfrost 发表于 2011-05-13 11:59
參數分爲傳值和傳地址
void foo(int i)
{
i = i+ 1;
}
void foo2(int* i)
{
(*i) = (*i) + 1;
}
复制代码
int x, y;
x = 1;
不會改變 x
foo(x)
x=1
會改變x
foo2(x)
x=2
作者:
Cu_fans
时间:
2011-05-13 12:06
你的理解是对的
作者:
pmerofc
时间:
2011-05-13 12:35
提示:
作者被禁止或删除 内容自动屏蔽
作者:
sfrost
时间:
2011-05-13 13:01
回复
2#
egmkang
非常感谢3#、4#、5#的朋友,谢谢你们的回答,幸好我之前有过编程经验,不然又会被网上的一些错误的答案误导。
至于2#这位朋友的态度,不作评论。
作者:
egmkang
时间:
2011-05-13 13:55
回复
6#
sfrost
呵呵
作者:
qiyuefeng11
时间:
2013-01-11 16:43
不会发生改变。函数调用只是简单的单向值传递,并不能能够修改原值。如果想要达到修改的目的,可以使用指针
作者:
hellioncu
时间:
2013-01-11 16:45
挖坟
作者:
elegant87
时间:
2013-01-11 17:12
你的理解是正确的。C语言函数参数形式有:传值和传指针两种。传值的话形参与实参结合的时候,形参需要创建临时变量保存实参的值,函数执行过程中是对形参操作的,实际参数没有改变。
对于指针参数,对应的是实参的地址,操作地址的话才能改变实际的参数。另外也可以用引用,也可以达到这种效果。
作者:
haryer
时间:
2013-01-11 17:19
较之函数的指针参数,传个引用进去的方法,这样也少产生个临时指针变量了~~效率较高
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2