为什么用if(!p)来判断开辟空间失败

来源:百度知道 编辑:UC知道 时间:2024/05/31 17:58:05
void initstack(sqstack *s)
{
s->top=s->base=(int *)malloc(STACK_INI_SIZE*(int));
if(!s->base)
exit(1);
s->length=0;
s->stacksize=STACK_INI_SIZE;
}
我知道这是正确的开辟空间的方法 但是具体为什么if(!s->base)这么样来判断 我想不明白 s->base在为开辟成功的状态下也是有数值的 并不是0
比如
typedef struct
{
int base;
int top;
}sqlist;
main()
{
sqlist s;
printf("%d ",&(s.base));
}
就输出了s.base所在的地址的数值

一个是变量定义时的随机分配的值(这不叫开辟),一个是从函数返回的值。
不一样的

失败的时候 p = 0, !p 就不为零,所以条件为真,这时执行if 内部的语句

成功当然不是0,那失败呢?