C语言中取地址符&做函数形参?—— 引用的讨论

取地址符&做函数形参?

C语言强大且危险


引入

这个问题花去了整整一天的研究。

先看一段严蔚敏的《数据结构》中栈的例程:

栈的压入

这里面的&S第一遍看的时候想当然的认为是取了SqStack结构体的S的地址,没有细想。然后又看到了这句。

// platform: VC++6.0
Status Pop(SqStack &S, SElemType &e); //取地址符?

我开始突然发现,这真的是取地址符吗,对照了我自己写的程序,仔细推敲发现不太对。
仔细看这里的&e,如果这是个整型的栈,那么SElemType就是int,那么这里就等于:

Status Pop(SqStack &S, int &e); //很奇怪

类比的疑问

我们都知道:

int *a,*b; /* 定义了两个整型的指针 */
int **a, **b; /* 定义了整型指针的指针 */

那么难道说是

int &e; // 定义了以一个整型数为地址的变量e?

仔细看下接下来的函数定义:

这里写图片描述

显然这里可以看出由于top指针指向的是SElemType类型,所以e是SElemType类型的。所以以上类比显然是不对的。


C/C++中的引用参数

查找了很多的资料发现,这个实际上是C++里的形参符号,必须要在跟在数据类型的后面使用。在函数内部对形参的操作都等同于直接操作原变量。

先说形参和实参

学过C语言的都知道,一个经典的例子是关于写一个交换两个变量a,b的值的函数:

// “形参不等于实参”的经典错误示范
void swap(int a, 
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值