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

谁能给我一份函数参数传递的资料?

楼主sunfanet(十年磨剑)2004-05-02 21:07:19 在 C/C++ / C语言 提问

自己好象越学越笨了,现在转不过来函数的参数传递这个弯了!  
  有好心人能给我些资料和讲解吗? 问题点数:20、回复次数:6Top

1 楼freefalcon(心宇—消失中...)回复于 2004-05-02 21:18:15 得分 5

现在转不过来函数的参数传递这个弯了?  
   
  c里面分传值和传址方式  
  前者只是传递变量的一个“拷贝”,对参数操作不会影响原来的变量  
  后者则是把变量的地址交给函数,对参数的操作就是对原变量的操作  
  Top

2 楼cngdzhang()回复于 2004-05-02 21:24:31 得分 5

C语言里面是按值传递的  
   
  //传值  
  int   i=10;  
   
  void   change(int   n)  
  {  
        n=100;  
  }  
   
  change(i);  
  i的值还是10,不是100;  
   
  //传地址  
  int   i=10;  
   
  void   change(int   *n)  
  {  
        *n=100;  
  }  
   
  change(&i);  
  i的值是100,不是10;  
   
  Top

3 楼21stITren(PC)回复于 2004-05-02 21:51:11 得分 0

嘿嘿,我把问题搞复杂一点.......  
  /////////////////////////////////////////////////////////  
  .MODEL   是用来指定内存模式的伪指令,在Win32下,只有一种内存模型,那就是FLAT。   STDCALL   告诉编译器参数的传递约定。参数的传递约定是指参数传达时的顺序(从左到右或从右到左)和由谁恢复堆栈指针(调用者或被调用者)。在Win16下有两种约定:C   和   PASCAL。C   约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针。  
   
  例如:为调用函数   foo   (   int   first_param,   int   second_param,   int   third_param   );   按C约定的汇编代码应该是这样的:  
   
  push   [third_param]  
  push   [second_param]  
  push   [first_param]  
  call   foo  
  add   esp,   3   *   4   ;调用者自己恢复堆栈指针  
   
  PASCAL约定和C约定正好相反,它规定参数是从左向右传递,由被调用者恢复堆栈。Win16采用了PASCAL约定,   因为PASCAL约定产生的代码量要小。当不知道参数的个数时,C约定特别有用。如在函数wsprintf   ()   中,   wsprintf预先并不知道要传递几个参数,所以它不知道如何恢复堆栈。STDCALL是C约定和PASCAL约定的混合体,它规定参数的传递是从右到左,恢复堆栈的工作交由被调用者。Win32只用STDCALL约定,但除了一个特例,即:wsprintf。  
  Top

4 楼21stITren(PC)回复于 2004-05-02 22:05:52 得分 0

To   cngdzhang():  
      void   change(int   n)这个函数是变量作用域的问题,应该是生成一个临时变量。不然,你说他是按值传递,那他传的是什么呢?总不会是i或他的值吧?  
  Top

5 楼sunfanet(十年磨剑)回复于 2004-05-03 11:17:13 得分 0

cngdzhang  
  在上面提到的是   i   的值的变化   那   n   呢?  
  来讲解下   这个函数的   参数传递的作用吧!Top

6 楼21stITren(PC)回复于 2004-05-03 13:32:17 得分 10

n其实只是一个形参,当用不同的参数调用change函数时,这些参数就是n,比如上面的i调用函数时,i就是n.Top

相关问题

  • 传递函数做参数
  • 函数的参数传递数值!?
  • 函数的参数传递问题
  • perl 函数参数传递问题
  • 函数参数传递问题?
  • 回掉函数的参数的传递?
  • 函数参数传递问题
  • 关于函数参数传递问题?
  • 怎样传递Swap函数的参数?
  • 请问:如何能用函数名作为函数的参数进行传递

关键词

  • win32
  • 函数
  • 指针
  • pascal
  • 参数
  • 传递
  • 约定
  • c约定
  • 变量
  • 从右到左

得分解答快速导航

  • 帖主:sunfanet
  • freefalcon
  • cngdzhang
  • 21stITren

相关链接

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

广告也精彩

反馈

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