`
huangfeiNetJava
  • 浏览: 39620 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

指针的引用

    博客分类:
  • cpp
 
阅读更多

     

      种了几个小时的树,竟然发现自己对指针引用却一窍不通,黯然神伤啊...

 

遇到的情况

      一开始初始化一个root节点赋为NULL,然后是建树,当以先序遍历整棵树输出节点值时,发现树总是空的。开始以为内存没有分配出来,直接调了几小时,才发现是自己不懂得指针引用!这么基础都不懂啊,怎能不叫人心惊胆战……

 

查漏补缺

      很清楚,在传值调用中,改变形参不会影响实参(形参是实参拷贝),如果形参是单指针,可以实实在在地影响实参的值(形参和实参指向同一块堆区)。

      虽然单指针形参可以改变堆的值,但是有一样东西是改变不了的——指针的指向

#include <iostream>
using namespace std;
void test(int *p){
	p=new int;
	*p=200;
}
int main() {
	int *p=NULL;
	test(p);
	cout << *p << endl;
	return 0;
}

       我原本以为这样会输出200,但是我错了,程序运行后直接崩溃!虽然在外函数的函数体里面给p指针分配了堆区并赋了值,但是回到主函数之后,p依然是NULL!!!

 

      而在把test函数的声明部分改为:

void test(int *&p);

 

      运行结果就打印出了200。

 

 

小结:

       如果使用单纯的指针,形参不能改变实参的指向。但如果是指针的引用就不同了,改变了形参的指向,实参的指向也会随之改变。

       懂了这个语法再去种树,树理所当然就可以生成了。

 

 

1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics