#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a = 5 ;
    int * p =(int *)malloc(sizeof(int));
    int * q =NULL ;
    if(!q) printf("没有分配内存\n");exit(-1);
    if(p)
    {
        p = &a ;
    }
    printf("%d\n",*p);
}
c语言里, 数字0被认为是假, 非0被认为是真
假设p内存分配成功那么if(p) 是一个为永真的表达式他等于if(p!=NULL)
假设q内存分配失败,他就是NULL,那么if(!q) 就等于if(q==NULL) , 简单的问题反而会忽略
C语言忽略的一点if(p)和if(!p)与if(p ==NULL) 有什么关系呢
原文:https://www.cnblogs.com/cocobear9/p/12740749.html