标签:
一.为何
struct tagNode struct tagNode
{ {
ElemType data; ElemType data;
struct tagNode LeftNode; struct tagNode* LeftNode;
struct tagNode RightNode; struct tagNode* RightNode;
};//无法通过编译 };//正常通过编译
C/C++采用静态编译模型。程序运行时,结构大小会在编译后确定。程序要正确编译,编译器必须知道一个结构所占用的空间大小。除此之外还有一个逻辑方面的问题,在这种情况下,想想可以有LeftNode.LeftNode.LeftNode.LeftNode这类错误也称为类和结构的递归定义错误
如果采用指针形式,指针的大小与机器的字长有关,不管是什么类型,编译后指针的大小总是确定的,所以这种情况下不需要知道结构struct tagNode的确切定义。例如,在32位字长的CPU中,指针的长度为4字节。所以,如果采用指针的形式,struct tagNode的大小在其编译后即可确定,为sizeof(int)+4+4.对于对象形式的struct tagNode定义,其长度在编译后是无法确定的。
标签:
原文地址:http://www.cnblogs.com/fenghuan/p/4850839.html