参数传递(补充)与全局变量

  1. 对于全局变量的声明,这两天一直在写双链表的代码,是采用《算法导论》中定义了哨兵的伪代码实现的。我的具体思路这样的,在一个list.h文件中声明一个全局指针变量 nil,然后在在list.cppmian.cpp中调用nil,程序可以编译通过,运行时也没有报错,但是确总是得不到预期的结果。查阅了很多相当相 关资料,发现犯了一个很低级的错误,那就是全局变量声明关键字staticextern的使用。static声明的全局变量的作用域是一个文件之内,而extern定义的全局变量只要在其他文件中声明,是可以跨文件使用的。所以说,想要定义一个跨文件使用的全局变量时应该用extern定义。
  2. 对于参数传递的一点补充,这几天总遇到*&类型的参数传递,比如void func(int *&ref),既然引用的类型是int *型的,那么我们可不可以int a=3;然后通过func(&a)来传递a的地址呢?答案是否定的,因为&操作符在右值表达式中返回的是一个地址常量,对于&引用,其右值必须是一个具有相同类型的变量,就像int &a=2非法一样,也就是说&引用只能绑定左值表达值(相同类型的对象)。但是在void func(int **ref)中,int a=3;int *pa=&a;func(&a);则可以传递地址常量了,因为**可以传递类型相同的左值表达式和右值表达式。

转载于:https://www.cnblogs.com/fingerdancing/archive/2013/04/14/paramStatic.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值