1、C语言实参、形参、函数调用、指针、引用、*&符号实例
实现环境:VC6
程序源代码:
#include "stdio.h"
#include
2、", *b); (*b)--; printf(" 指针形参b所指内容变为:%d\n", *b); } void fun3(int &c) //数值的引用调用,相当于给数值实参n起个新名字叫c,然后c就是实参n { printf(" 引用数值形参c的地址为:%X\n",&c); printf(" 引用数值形参c为:%d\n", c); c--; printf(" 引用数值形参c变为:%d\n", c); } void fun4(int * &d) //指针的引用调用,相当于给指针实参m起个新名字叫d,
3、然后d就是实参m { printf(" 引用指针参数d为:%X\n", d); printf(" 引用指针参数d所指内容为:%d\n", *d); (*d)--; printf(" 引用指针参数d所指内容变为:%d\n", *d); } void main() { int n=11; //有11个苹果 printf("实参n为:%d\n",n); fun1(n); //传值调用 printf("数值n为:%d\n\n",n); printf("实
4、参n的地址为:%X\n",&n); printf("数值n为:%d\n",n); fun2(&n); //指针调用 printf("实参n的地址为:%X\n",&n); printf("数值n为:%d\n\n",n); printf("实参n的地址为:%X\n",&n); printf("数值n为:%d\n",n); fun3(n); //数值的引用调用 printf("实参n的地址为:%X\n",&n); printf("数值n为:%d\n\n",n)
5、 int * m; m=&n; printf("数值n的地址为:%X\n",&n); printf("数值n为:%d\n",n); printf("指针m为:%X\n",m); fun4(m); //指针的引用调用 printf("数值n的地址为:%X\n",&n); printf("数值n为:%d\n",n); printf("指针m为:%X\n\n",m); } 参考内容: VC++中形参什么时候需要加&符号 引用不是必须的,因为用指针可以达到相同的效果
6、 当你传递的实参值需要在函数中获取改变的时候,就需要传引用或者指针 假设有 n = 10 个苹果 void fun(int m) //传值函数,每调用一次减少一个苹果 fun(n);//如果按上面的声明 ,这样调用完后,n还是10,并没有变成9 在这种时候就需要用到引用或者指针 void fun(int &m) ; //引用类型函数声明 ,对应调用fun(n); // void fun(int *m); //指针类型函数声明 ,对应调用fun(&n); // 具体的函数体可以自己去写 事实上,引用的本质就是指针,使用引用能完成的事情,使用指
7、针同样能完成 ,不过引用看上去更简洁和直观 引用参数 在形参表中以符号“&”开始的参数即为引用参数。 如果一个形参是引用参数,调用部位将把实参的地址传递给子程序。 于是子程序操作的就是实参真正的变量,而不是它的副本。 如果程序员想修改指针本身,而不是指针引用的对象: 那么他可以声明一个参数,该参数是一个指针的引用,例如:下面是交 换两个指针的函数。 1 2 3 4 5 void ptrswap( int * & v1, int * & v2 ) { int *tmp = v2; v2 = v1; v1 = tmp; } 如下声明
8、
int * &v1; //实际是为指针取了一个别名,这样就可以通过别名改变指针本身
应该从右向左读,v1 是一个引用,它引用一个指针,指针指向 int 型的对象。
用函数 main() 操纵函数 rswap() 我们可以如下修改代码以便交换两个指针值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include
9、 int j = 20; int *pi = &i; int *pj = &j; cout << "Before ptrswap():\tpi: " << *pi << "\tpj: " << *pj << endl; //参数为指针的别名(即指针的引用,那么传递的实参就是指针本身,道理和传递普通变量一样的) ptrswap( pi, pj ); cout << "After ptrswap():\tpi: " << *pi << "\tpj: " << *pj << endl;
10、 return 0; } 编译并运行程序 产生下列输出 Before ptrswap(): pi: 10 pj: 20 After ptrswap(): pi: 20 pj: 10 参考: C++ 引用参数 深入分析 比如函数 void a(int &x,int &y) 当调用该函数时,如:a(m,n); 就相当于在执行函数体时,x为m的引用,y为n的引用 x,y相当于指向m,n的指针 相当于给m,n起的别名,这时在函数体内对x,y进行的操作实际上就是对m,n进行操作。 %d %o %x %X 分别是 十进制,八进制,十六进制(小写),十六进制(大些)的输出格式!






