标签:
// 二叉树的建立.cpp : 定义控制台应用程序的入口点。
//
#include <iostream>
using namespace std;
//定义二叉排序树的节点
typedef struct Node
{
int data;
struct Node * lchild;//左孩子
struct Node * rchild;//右孩子
}Node,* PNode;
PNode T=NULL;//二叉排序树的根节点
//中序遍历二叉树
void MidSequence(PNode t)
{
if(t!=NULL)
{
MidSequence(t->lchild);
cout<<t->data<<" ";
MidSequence(t->rchild);
}
}
//往二叉排序树中插入一个新节点(递归实现)
void CreateBSortTree2(PNode & t,int data)
{
if(t==NULL)
{
//建立一个新节点
PNode p=(PNode)malloc(sizeof(Node));
p->data=data;
p->lchild=NULL;
p->rchild=NULL;
t=p;
return;
}
else if(t->data>data)
CreateBSortTree2(t->lchild,data);
else
CreateBSortTree2(t->rchild,data);
}
void insertNode(Node *root,int value){
if(root==NULL){
Node *node=(Node*)malloc(sizeof( Node));
node->data=value;
node->lchild=NULL;
node->rchild=NULL;
root=node;
return ;
}
if(root->data>value){
insertNode(root->lchild,value);
}
if(root->data<value){
insertNode(root->rchild,value);
}
}
//测试
int main()
{
int a[]={0,5,8,4,2,3,10};
int len=sizeof(a)/sizeof(int);
for(int i=0;i<len;i++)
{
//CreateBSortTree2(T,a[i]);
insertNode(T,a[i]);
}
std::cout<<T->rchild->data;
MidSequence(T);
system("PAUSE");
return 0;
}
void insertNode(Node *root,int value){
if(root==NULL){
Node *node=(Node*)malloc(sizeof( Node));
node->data=value;
node->lchild=NULL;
node->rchild=NULL;
root=node;
return ;
}
if(root->data>value){
insertNode(root->lchild,value);
}
if(root->data<value){
insertNode(root->rchild,value);
}
}
//往二叉排序树中插入一个新节点(递归实现)
void CreateBSortTree2(PNode & t,int data)
{
if(t==NULL)
{
//建立一个新节点
PNode p=(PNode)malloc(sizeof(Node));
p->data=data;
p->lchild=NULL;
p->rchild=NULL;
t=p;
return;
}
else if(t->data>data)
CreateBSortTree2(t->lchild,data);
else
CreateBSortTree2(t->rchild,data);
}
#include<iostream>
void foo(int *a){
int b=10;
std::cout<<"b的值 "<<b<<std::endl;
//a=&b;
*a=b;
}
int main(){
int a=3;
foo(&a);
std::cout<<"a的值 "<<a<<std::endl;
}
#include<iostream>
void foo(int *a){
int b=10;
std::cout<<"b的值 "<<b<<std::endl;
a=&b;
// *a=b;
}
int main(){
int a=3;
std::cout<<"函数运行前a的值 "<<a<<std::endl;
foo(&a);
std::cout<<"函数运行后a的值 "<<a<<std::endl;
}
void foo(int *a){
int b=10;
std::cout<<"b的值 "<<b<<std::endl;
a=&b;
// *a=b;
}
//往二叉排序树中插入一个新节点(递归实现)
void CreateBSortTree2(PNode & t,int data)
{
if(t==NULL)
{
//建立一个新节点
PNode p=(PNode)malloc(sizeof(Node));
p->data=data;
p->lchild=NULL;
p->rchild=NULL;
t=p;
return;
}
else if(t->data>data)
CreateBSortTree2(t->lchild,data);
else
CreateBSortTree2(t->rchild,data);
}
引用传递和指针传递是不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量,那就得使用指向指针的指针,或者指针引用。
为了进一步加深大家对指针和引用的区别,下面我从编译的角度来阐述它们之间的区别:
程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变其指向的对象(指针变量中的值可以改),而引用对象则不能修改。
标签:
原文地址:http://www.cnblogs.com/yml435/p/4655460.html