CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

关于指针的菜鸟问题 :)

楼主kimsea(小鸟)2006-03-01 16:40:40 在 C/C++ / C语言 提问

最具有代表性的指针例子:  
  #include   <stdio.h>  
  void   interchange(int   *u,   int   *v);  
  int   main(void)  
  {  
          int   x   =   5,   y   =   10;  
          printf("Originally   x   =   %d   and   y   =   %d.\n",   x,   y);  
          interchange(&x,   &y);     /*   send   addresses   to   function     */  
          printf("Now   x   =   %d   and   y   =   %d.\n",   x,   y);  
          return   0;  
  }  
  void   interchange(int   *u,   int   *v)  
  {  
          int   temp;  
          temp   =   *u;               /*   temp   gets   value   that   u   points   to   */  
          *u   =   *v;  
          *v   =   temp;  
  }  
   
  按照我的理解  
  函数应该是     void   interchange(int   u,   int   v);  
  u,v引用变量地址:&x,&y  
  u=&x,v=&y     然后u   v进行交替,也就是x,y的地址交换  
  这样也就是x   y的值交换了?  
  为什么不是下面的形式,请高手给菜鸟解释下   :)  
  难道   *   和   &   要成对使用吗?  
   
  #include   <stdio.h>  
  void   interchange(int     u,   int     v);  
  int   main(void)  
  {  
          int   x   =   5,   y   =   10;  
          printf("Originally   x   =   %d   and   y   =   %d.\n",   x,   y);  
          interchange(&x,   &y);     /*   send   addresses   to   function     */  
          printf("Now   x   =   %d   and   y   =   %d.\n",   x,   y);  
          return   0;  
  }  
  void   interchange(int     u,   int     v)  
  {  
          int   temp;  
          temp   =   u;                
          u   =   v;  
          v   =   temp;  
  } 问题点数:20、回复次数:9Top

1 楼FBIq(aiby)回复于 2006-03-01 16:51:26 得分 0

形参和实参类型不一致  
  补充一点:如果你要实现真正的交换两个变量的值应该按引用传递Top

2 楼AllenCpp(AllenCpp)回复于 2006-03-01 16:54:03 得分 0

void   interchange(int     u,   int     v)  
  这样就不能起到  
  temp   =   u;                
  u   =   v;  
  v   =   temp;的效果,函数返回不会有交换的  
  void   interchange(int   *u,   int   *v)是地址的传递  
  我不知道我有没有说清楚,多看看书吧~Top

3 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2006-03-01 16:58:29 得分 0

值参和行参  
   
  你需要理解函数是如何传递参数的  
  在c语言当中  
  函数并没有把你调用它的时候的变量本身带入函数当中  
  而只是把变量的具体数值带入其中了  
  所以在后面的例子当中  
    x   =3,   y=4  
    interchange(x,y);  
    这个调用并不是把x,和y传入函数,而是把x和y的数值传入函数内部  
    这两个数值,在函数内部是两个新的变量的值,这两个新的变量u和v和x与y没有直接的关系  
    同样在函数内部把u和v的数值交换了,对于x和y没有任何影响  
   
  相反,前面的例子传入的是x和y这两个变量的地址  
  新的变量u和v交换的不是指针,而是指针指向的位置的内容,这个交换是会直接影响到x和y的  
  为什么,自己想吧Top

4 楼duduhaha(三人行必有我师)回复于 2006-03-01 16:58:56 得分 0

#include   <stdio.h>  
  void   interchange(long   int     u,   long   int     v);  
  int   main(void)  
  {  
          int   x   =   5,   y   =   10;  
          printf("Originally   x   =   %d   and   y   =   %d.\n",   x,   y);  
          printf("addressX:   %x   addressY:   %x\n",&x,&y);  
          interchange((long   int)&x,   (long)&y);     /*   send   addresses   to   function     */  
          printf("Now   x   =   %d   and   y   =   %d.\n",   x,   y);  
          printf("addressX:   %x   addressY:   %x\n",&x,&y);  
          return   0;  
  }  
  void   interchange(long   int     u,   long   int     v)  
  {  
          long   int   temp;  
          temp   =   u;                
          u   =   v;  
          v   =   temp;  
  }  
   
  我给你加了两条输出地址的语句,注意我新加的两条语句输出一样,这是因为传进去的指针实际上有个副本,在interchange函数中是对两个副本进行操作的.我可能说得不是很清楚,钱能的<<c++程序设计>>对这个阐述的比较好.Top

5 楼cyberHunK(→迈克·老猫←)回复于 2006-03-01 17:00:58 得分 0

看参数传递的章节,你要记住参数进行的是“值传递”!Top

6 楼upcuiling()回复于 2006-03-01 17:03:19 得分 0

你完全理解错了  
  只有指针才能根据地址来改变地址所指的内存内容,如果你这样可以的话,int型和int型指针岂不是一样了。还有函数是不能改变实参值的,因为实参只是以一个副本在函数里进行操作,他一点事都没有。  
  但是如果实参是指针的话,则可以改变他所指向的内存,而指针本身是不边的,变得是他指向的内容Top

7 楼kimsea(小鸟)回复于 2006-03-01 17:21:25 得分 0

谢谢   happy__888   duduhaha   及以上的个位   :)  
  明白了,值参和行参的问题。。。。。     呵呵Top

8 楼watermelontx(晨曦)回复于 2006-03-01 19:24:25 得分 0

void   interchange(int     u,   int     v);  
  这种是值的传递.只交换形参  
   
  void   interchange(int   *u,   int   *v);  
  这种是指针传递,才真正将实参的值交换..Top

9 楼wcg_jishuo()回复于 2006-03-02 14:30:22 得分 0

指针就是地址变量Top

相关问题

  • 指针的菜鸟问题
  • 菜鸟问指针问题:
  • 关于指针的菜鸟问题:
  • 散分:菜鸟的指针问题
  • 菜鸟问一个指针问题
  • 关于指针的菜鸟问题
  • 小菜鸟问个简单的语法问题:关于指针的指针
  • 菜鸟高分求救:如何取得菜单指针
  • Tc菜鸟问指针问题(一定给分)
  • 菜鸟问题 请问怎么用数组指针?

关键词

  • 函数
  • 指针
  • 交换
  • 数值
  • 内容
  • interchange
  • 变量
  • 传递
  • 地址
  • temp

得分解答快速导航

  • 帖主:kimsea

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo