c++-C++中使用指针引用的问题

问题描述

C++中使用指针引用的问题

#include
#include
using namespace std;

struct BSTNode
{
BSTNode left;
BSTNode *right;
int data;
BSTNode(int value){
data=value;
left=NULL;
right=NULL;
}
};
class BST{
public:
BST(){
root=NULL;
}
void insert(BSTNode *&ptr,int value){
if(ptr==NULL){
ptr=new BSTNode(value);
return ;
}
else if(ptr->data>value) insert(ptr->left,value);
else if(ptr->dataright,value);
else return ;
}
bool remove(BSTNode *&ptr,int value){
return false;
}
void printtree(BSTNode *ptr){
if(ptr!=NULL){
queue<BSTNode
> myque;
myque.push(ptr);
BSTNode temp;
while(!myque.empty()){
temp=myque.back();
myque.pop();
cout<data<<" ";
if(temp->left!=NULL) myque.push(temp->left);
if(temp->right!=NULL) myque.push(temp->right);
}
}
}
BSTNode
getroot(){
return root;
}
//public:
BSTNode *root;
};

void main(){
BST *tree = new BST;
int value;
cout<<"二叉搜索树为"<
tree->printtree(tree->getroot());
cout<
cin>>value;
// int &a=value;
// int &b=4;
while(value!=EOF){
tree->insert(tree->root,value);//通过指针直接获得root,函数调用的参数不会出错
tree->insert(tree->getroot(),value);//通过get方法获得root,函数调用的参数出错,提示“非常量引用的初始值必须为左值”
BSTNode *test = tree->getroot();//如果先通过get方法获得root并赋值给test,在将test传递给函数,参数不会出错
tree->insert(test,value);
cout<getroot()<<"-----"<root;
cout<<"二叉搜索树为"<
tree->printtree(tree->getroot());
cout<
cin>>value;
}
}
通过函数获得数据成员和通过指针获得数据成员有什么区别?

解决方案

因为通过指针,可以修改成员的数值;但是通过函数呢,Get 就之是获取、没有赋值的功能。

tree 在 new 之后,还没有赋值。所以,要求后续的操作只能使用成员、不能使用函数。因为此时函数还未完成初始化!

解决方案二:

直接用root,它是指针,可以作为函数参数传递。而函数返回值作为参数,它是右值。你作为参数传递就不符合语法。

时间: 2024-12-20 23:29:51

c++-C++中使用指针引用的问题的相关文章

JAVA中的指针,引用及对象的clone

Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念.并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象.本文会让你了解什么是影子clone与深度clone,认识它们的区别.优点及缺点. 看到这个标题,是不是有点困惑:Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的代码不亚于

详解Java中的指针、引用及对象的clone

对象|详解 Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念.并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象.本文会让你了解什么是影子clone与深度clone,认识它们的区别.优点及缺点.看到这个标题,是不是有点困惑:Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的

向函数中传递指针和传递指针的引用的区别

如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针:但 是对于传递指针应用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再 引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释放了指针,那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了   看个例子: #incl

C++中的指针与引用详细解读

1.指针和引用的定义 在深入介绍之前我们首先来看一下指针和引用的定义.指针和引用的区别,然后分别针对指针和引用展开讨论,深入细节为何有这些差异. 指针的权威定义: In a declaration T D where D has the form * cv-qualifier-seqopt D1 And the type of the identifier in the declaration T D1 is "derived-declarator-type-list T", then

C++中的指针与引用

写在前面 指针和引用形式上很好区别,但是他们似乎有相同的功能,都能够直接引用对象,对其进行直接的操作.但是什么时候使用指针?什么时候使用引用呢?这两 者很容易混淆,在此我详细介绍一下指针和引用,力争将最真实的一面展现给大家.如果我喷得不够好,希望嘴下留情.手下留命,还请指点一二:如果感觉还不 错,请大家鼓掌. 1.指针和引用的定义 在深入介绍之前我们首先来看一下指针和引用的定义.指针和引用的区别,然后分别针对指针和引用展开讨论,深入细节为何有这些差异. 指针的权威定义: In a declara

C++中的指针用法大搜罗

  在C++中,指针用得比较多,对于里面众多的指针用法,不免弄得有些糊涂,自从我从图书馆里借到一本谭浩强教授主编的<C++面向对象程序设计>后,才帮我理清了思路.现把部分内容展现给大家,希望对大家有所帮助. C++程序设计重要基础就是类和对象,对象指针是很重要的一部分,包括指向对象的指针.指向对象成员的指针.this指针.指向对象的常指针.指向常对象的指针等. 1.指向对象的指针 定义:对象空间的起始地址就是对象的指针. 说明:在建立对象时,编译系统就为每个对象分配一定的存储空间以存放其成员,

C++中的指针用法汇总

在C++中,指针用得比较多,对于里面众多的指针用法,不免弄得有些糊涂,自从我从图书馆里借到一本谭浩强教授主编的<C++面向对象程序设计>后,才帮我理清了思路.现把部分内容展现给大家,希望对大家有所帮助. C++程序设计重要基础就是类和对象,对象指针是很重要的一部分,包括指向对象的指针.指向对象成员的指针.this指针.指向对象的常指针.指向常对象的指针等. 1.指向对象的指针 定义:对象空间的起始地址就是对象的指针. 说明:在建立对象时,编译系统就为每个对象分配一定的存储空间以存放其成员,不过

Word2007中插入交叉引用的设置

  学到这里,在Word2007文档中编辑的功能学得差不多了,前面我们学了为文本添加注释的方法,如脚注和尾注.题注以及对书签功能的介绍.而现在小编要把基础知识升级下,对交叉引用做个详细的介绍. 第1步,打开已添加书签的Word2007文档窗口,将插入条光标定位到合适的位置.切换到"插入"功能区,在"链接"分组单击"交叉引用"按钮,如图所示. 单击"交叉引用"按钮 第2步,在打开的"交叉引用"对话框中,单击&

C++中的指针、数组指针与指针数组、函数指针与指针函数

C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针.如何使用指针.如何定义指针.如何定义数组指针和函数指针,并给出对应的实例演示:接着,区别了数组指针与指针数组.函数指针与指针函数:最后,对最常混淆的引用传递.值传递和指针传递做了区处. C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力.指针可以用于数组.或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较