读书人

函数中使用结构体指针改变成员变量的值

发布时间: 2012-02-25 10:01:49 作者: rapoo

函数中使用结构体指针改变成员变量的值怎么不能传递到主函数中去
程序代码如下:
#include <stdlib.h> #include <iostream.h>

struct TNode
{
int data ;
TNode *lchild ;
TNode *rchild ;
} ;

void CreateTree(TNode *T , int A[] , int begin , int end)
{
if (begin > end)
{
T = NULL ;
return ;
}

int index = 0.5 * (begin + end) ;

T = (TNode*)malloc(sizeof(TNode)) ;

T-> data = A[index] ;

CreateTree(T-> lchild , A , begin , index - 1) ;

CreateTree(T-> rchild , A , index + 1 , end) ;
}


void main()
{
int A[10] ;

for (int i = 0 ; i < 10 ; i++)
{
A[i] = i ;
}

TNode *T ;

CreateTree(T , A , 0 , 9) ;

cout < < T-> data < < endl ;
}
程序运行不太对,错误就出在CreateTree函数中创建的T节点的的成员变量值没有传递出去,但是CreateTree函数的形参是指向结构体的指针啊,为什么会出现这种问题呢?



[解决办法]
void CreateTree(TNode* &T , int A[] , int begin , int end)
----------
改成对指针的引用...
[解决办法]
因为需要将指针自身传出去
如果在函数外面分配空间就不需要引用了
[解决办法]
如果需要改变变量的值,那么就应该传变量的指针(地址),
如果需要改变指针的值,那么就应该传指针的指针(地址)。

[解决办法]
不用引用可以用指针的指针
void CreateTree(TNode **T , int A[] , int begin , int end)
{
TNode* newT;

if (begin > end)
{
T = NULL;
return;
}

int index = 0.5 * (begin + end);

newT = (TNode*)malloc(sizeof(TNode));
*T = newT;

newT-> data = A[index] ;

CreateTree(&newT-> lchild , A , begin , index - 1) ;

CreateTree(&newT-> rchild , A , index + 1 , end) ;
}


void main()
{
int A[10] ;

for (int i = 0 ; i < 10 ; i++)
{
A[i] = i ;
}

TNode *T ;

CreateTree(&T , A , 0 , 9) ;

cout < < T-> data < < endl ;
}

读书人网 >C语言

热点推荐