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

  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);则可以传递地址常量了,因为**可以传递类型相同的左值表达式和右值表达式。
posted @ 2013-04-14 18:07  FingerDancing  阅读(467)  评论(0编辑  收藏  举报