if(!*T){} 是什么意思? (注:T时空指针) (C语言)

还有 *T=(BiTree)malloc(sizeof(BiTNode)); (BiTree)是强制转换么?

谢谢~

如果T是空指针那么*T会出错,因为这是访问T指向的内存单元的意思。
应该是if(!T)意思是如果T不为空。其实这种写法很不标准,在不不同的平台上依然会出错,建议写成if(T!=NULL)
malloc(sizeof(BiTNode))的意思是分配一个BitNode结构一样大小的内存单元,malloc和new操作符相似。然后把这段内存单元转换成BitNode结构。其实就是创建一个BitNode的结构体(或对象)
这里的强制转换其实名不符其实,因为malloc仅仅是分配出内存单元,是对内存最底层的操作,根本无数据类型可言。加上一个所谓的强制转换只是告诉VC(编译器)这段内存是用作一个叫BitNode的结构体的。

参考资料:原创

温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-04-28
*T=(BiTree)malloc(sizeof(BiTNode));
是的,这个是强制类型转换,是告诉编译系统,你知道这样赋值的后果,要编译器不要对这里报错。

一般如果你的T是这样定义的,上面一句才不会出错
BiTree **T;

if(!*T){程序体}
这句意思是如果T所指向的内存单元为零,则进入程序体。
也可以这样理解:如果T指向的元素不存在,则进入。
可以改用这样的方式
if(!T[0]){}
或者
if(T[0]==0){}
第2个回答  2008-04-28
if(!*T){}先将*T转换成bool值,非0为true,0为false;然后取反。

*T=(BiTree)malloc(sizeof(BiTNode)); 这种用法没见过,个人觉得这样更好理解一些:
T = (BiTNode*)malloc(sizeof(BiTNode));
因为malloc返回的是BiTNode指针。
这里的(BiTree)是强制类型转换。。
第3个回答  2008-04-28
if(!*T) 指指针T的内容不为0
如果T是NULL的话一般会出错的
malloc返回的是指针,是强制转换成BiTree类型指针
typedef struct BiTNode * BiTree;
第4个回答  2008-04-28
(BiTree)是强制转换

标准C语言中,malloc()函数无需强制转换,使用强制转换只是个人的编程风格问题。
相似回答