| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 803 人关注过本帖, 2 人收藏
标题:函数传参的一点小体会
只看楼主 加入收藏
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
结帖率:100%
收藏(2)
已结贴  问题点数:20 回复次数:10 
函数传参的一点小体会
程序代码:
#include<stdio.h>

void fun(int in)//传值 复制数值传给in
{
    int u=100;

    in = u;
}

void fun_1(int *x)//传地址改变数值 x为地址(传入参数一般是指针或者是&整形变量)
{
    int b=77;

    *x=b;
}

void fun_2(int &v)//传地址改变数值 v为值(传入参数一般是*指针或者是整形变量)
{
    int c=89;
    v=c;
}

void fun_3(int *z)//传地址数值不变 z为地址(传入参数一般是指针或者是&整形变量)
{
    int b=77;
    int *i;

    i=&b;
    z=i;
}


void change_1(int a,int b)//交换-传值
{
  int t;

  t=a;
  a=b;
  b=t;
}

void change_2(int *a,int *b)//交换-传地址,值交换
{
  int t;

  t=*a;
  *a=*b;
  *b=t;
}

void change_3(int *a,int *b)//交换-传地址,地址交换
{
  int *t;

  t=a;
  a=b;
  b=t;
}

void change_4_error(int *a,int *b)//交换-传地址(程序非法!)
{
  int *t;

  *t=*a;//执行到这里出现非法,t没初始化,*t非法
  *a=*b;
  *b=*t;
}

int main()
{
//*-----------------------------------------------------------------------------
 int y1=9;        //测试变量y1
 int *p1=&y1;    //测试指针p1


 //fun(y1)通过编译,y1没有变化fun(y1)=fun(*p1);fun(p1)没有通过编译.

 //fun_1(&y1)可以,并且y1发生变化.fun_1(p1)=fun_1(&y1);fun_1(y1)没有通过编译

 //fun_2(y1)通过编译,并且y1发生变化fun_2(y1)=fun_2(*p1);fun_2(p1)没有通过编译

 //可以看出*x和&v都是要用地址,不复制数值!
 fun_3(p1);

 printf("y1=%d\n",y1);
//-------------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------------

 //数据交换测试

 int x1=22,x2=88;    //测试变量x1,x2

 int *ip1,*ip2;        //测试指针p1,p2


 ip1=&x1;//ip1指向x1

 ip2=&x2;//ip2指向x2

 //change_1(x1,x2)=change_1(*ip1,*ip2)数值不变

 //change_2(&x1,&x2)=change_2(ip1,ip2)交换数值

 //change_3(&x1,&x2)=change_3(ip1,ip2)数值不变

 //change_4_error(ip1,ip2)错误函数


 printf("x1=%d,x2=%d;*ip1=%d,*ip2=%d\n",x1,x2,*ip1,*ip2);
/---------------------------------------------------------------------------------*/

 return 0;
}
在传参时总是不能很好的对应,自己总结了一下,有些体会。
可以把//挨个去掉,有不足的地方多多指教,多多给力!
搜索更多相关主题的帖子: 函数 
2011-01-19 14:48
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:3 
学习了...
2011-01-19 15:38
icebergwang
Rank: 2
来 自:河北廊坊
等 级:论坛游民
帖 子:17
专家分:19
注 册:2011-1-8
收藏
得分:3 
void fun_2(int &v)//传地址改变数值 v为值(传入参数一般是*指针或者是整形变量)
{
    int c=89;
    v=c;
}
原来这样也行呀,学习了

跟着感觉走,欲速则不达
2011-01-19 16:25
马后炮
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:156
专家分:560
注 册:2010-12-17
收藏
得分:3 
以下是引用icebergwang在2011-1-19 16:25:35的发言:

void fun_2(int &v)//传地址改变数值 v为值(传入参数一般是*指针或者是整形变量)
{
    int c=89;
    v=c;
}
原来这样也行呀,学习了
这是C++的传参方式,不是C的

樱之雪,晓之车
2011-01-19 16:36
limingzhen90
Rank: 2
等 级:论坛游民
帖 子:53
专家分:72
注 册:2010-12-31
收藏
得分:3 
顶一下,辛苦了!

入门了吗?
2011-01-19 20:54
日的起烟烟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:129
注 册:2010-2-27
收藏
得分:3 
void fun_2(int &v)//传地址改变数值 v为值(传入参数一般是*指针或者是整形变量)
{
    int c=89;
    v=c;
}


这好像就是C++的引用。  但是我一直都不明白 &v  怎么会是int 类型呢?应该是指针类型啊 V到是好理解 但是&V就不好理解了
2011-01-19 21:21
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:3 
以下是引用日的起烟烟在2011-1-19 21:21:13的发言:



这好像就是C++的引用。  但是我一直都不明白 &v  怎么会是int 类型呢?应该是指针类型啊 V到是好理解 但是&V就不好理解了
理解错了呗, v 是 int& 类型

我就是真命天子,顺我者生,逆我者死!
2011-01-19 21:26
cacker
该用户已被删除
收藏
得分:3 
提示: 作者被禁止或删除 内容自动屏蔽
2011-01-19 21:34
日的起烟烟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:129
注 册:2010-2-27
收藏
得分:0 
(float&)a

这个的意思是不是就是 把A的地址 FLOAT化的意思?

int  &v  LZ这样写 我以为&v是一块的,int又是一块的。。

还有对于  int  &v  这个东西,编译器是 怎么结合解释的呢?

如果是int * v我觉得不管是 int*  v  还是int  *v都能理解。
但是  int & v 两个都不好理解。除非这样的情况下 &的意思已经不是取地址而是其他的意思。
2011-01-19 21:49
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
收藏
得分:0 
恩,把文件变成.c在编译时,&v通不过的.谢谢各位了。

帮人《---》帮己
2011-01-20 10:03
快速回复:函数传参的一点小体会
数据加载中...
 
   



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

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