LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 766|回复: 10

怎么自定义这样的函数?

[复制链接]
发表于 2004-4-25 02:51:05 | 显示全部楼层 |阅读模式
现有程序如下:
void main()
{
     int a=1,b=2,c=0;
     f(a,b,c);
     printf("%d+%d=%d",a,b,c);
}

现在要求自定义函数f,让这个程序可以打印出这样的结果:

1+2=3

小弟不明白的是,怎么让形参改变实参?谢谢了!!!!!!
发表于 2004-4-25 11:04:26 | 显示全部楼层
我刚起步,写不对不打我:p :p

  1. int f(a,b,c)
  2. {
  3. return c=a+b;
  4. }
复制代码
 楼主| 发表于 2004-4-25 11:27:33 | 显示全部楼层
当然不行啦.形参怎么改变实参?!
发表于 2004-4-25 11:39:26 | 显示全部楼层

  1. int f(int a, int b, int *c)
  2. {
  3.        *c = a + b;
  4.        return *c;
  5. }
复制代码
发表于 2004-4-25 11:43:17 | 显示全部楼层
如果要用形参来换变实参的话可以用址传递!!

  1. int f(int *a,int *b,int c)
  2. {
  3. *c=*a+*b;
  4. }
复制代码


但是调函数要改成

  1. void main()
  2. {
  3. int a=1,b=2,c=0;
  4. f(a,b,c);    //改成f(&a,&b,&c);
  5. printf("%d+%d=%d",a,b,c);
  6. }
复制代码
发表于 2004-4-25 12:59:49 | 显示全部楼层
不明白干嘛要搞个指针呢?

  1. void f(int a, int b)
  2. {
  3.   return (a+b);
  4. }
复制代码
发表于 2004-4-25 16:13:27 | 显示全部楼层
楼上的程序有点问题
应该是

  1. int f(int a, int b) {
  2.   return a + b;
  3. }
复制代码

要是用C++的话, 用引用不是更好么

  1. int &f(int a, int b, int &c) {
  2.   return c = a + b;
  3. }
复制代码
 楼主| 发表于 2004-4-25 20:04:31 | 显示全部楼层
呵呵……C++我是这样写的:
void f(int x,int y,int &z)
{
   z=a+b;
}

经过编译,确定是成功的。如果是C语言的话,我想应该是做不了上面的这个效果的的,因为C语言的只是传值调用,改变不了实参的值的。除非主程序那里引用的实参是用指针的形式引用。今天查书大概是这样说,不过不知道我说得对不对?!还请高手指正。。。。。
发表于 2004-4-26 12:49:33 | 显示全部楼层
C语言有两种传递方式:

1、用变量做参数传递(值传递)不能改变实参;

2、使用地址做参传递(址传递)就能改变实参的值。
发表于 2004-4-26 19:20:58 | 显示全部楼层
最初由 YSM 发表
C语言有两种传递方式:

1、用变量做参数传递(值传递)不能改变实参;

2、使用地址做参传递(址传递)就能改变实参的值。

C语言有两种传递方式?!! 真的是这样吗?
http://www.linuxsir.cn/forum.php ... F%CA%FD%B7%B5%BB%D8
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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