代码改变世界

函数的参数传递

2009-11-22 09:16  LeonDw  阅读(216)  评论(0)    收藏  举报

函数的参数传递

  • 参数传递思想

  • 抽象是对某一类事物共同特征,或统一规律的描述.相对现实,具体操作高一层.
  • 函数是相对主程序高一层的抽象,是对运行过程的描述.所以其输入参数称为形式参数.函数可类比成战术.
  • 指针是相对存储内容高一层的抽象,是对存储位置的描述.指针集可类比,作战地图.
  • 换言之,函数获得指针才取得对变量的控制权

  • 参数传递分类

  1. 值传递
    • 同一层次的操作,类比,纸上谈兵.凭票换礼品.
  2. 地址传递
    • 类比,利用战术,作战地图,调兵遣将.
    • 用于改变主程序参数的形式参数(即,主调函数也要用指针)要相对主程序参数升一级,加多一颗星
    • 在函数内部的操作则与主程序用同一级
      • 普通变量对应指针
      • 数组对应指针
      • {ps}数组跟普通的变量没什么区别,只是在存储逻辑上是一块的
      • 数组名,指向数组元素的指针就能控制数组
      • {eg}Win32API中的一些函数中,如wsprintf();
      • 指针对应指向指针的指针
  3. 引用传递
    •  1 void Exchang3(int &x,int &y)
       2 {
       3         int tmp;
       4         tmp=x;
       5         x=y;
       6         y=tmp;
       7         printf("x=%d,y=%d\n",x,y);
       8 }
       9 void main()
      10 {
      11         int a=1,b=2;
      12         Exchang3(a,b);
      13         printf("a=%d,b=%d\n",a,b);
      14 }
    • 编译报错
    • --------------------Configuration: p4 - Win32 Debug--------------------
      Compiling...
      p4.c
      E:\p4.c(21) : error C2143: syntax error : missing ')' before '&'
      E:\p4.c(21) : error C2143: syntax error : missing ')' before '&'
      E:\p4.c(21) : error C2143: syntax error : missing '{' before '&'
      E:\p4.c(21) : error C2059: syntax error : '&'
      E:\p4.c(21) : error C2059: syntax error : ')'
      执行 cl.exe 时出错.
      p4.exe - 1 error(s), 0 warning(s)
    • {Solution}将后缀改为cpp编译通过并得出
    • x=2,y=1
    • a=2,y=1
    • 为什么改为cpp才可以呢?C++在参数传递中多了些什么?可能C++的库才有引用传递吧.
  • 参数传递总结

  1. 符号"*"有两种意思:
    • int*p,定义声明变量时,表示该变量为指针变量
    • *p=10,使用时,表示指针p指向的变量的内容
  2. 符号"&"的意思:
    • 形式参数加"&"表示,通过调用形式参数能改变主程序对应变量的值