#define NULL 0
#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
int* p =NULL;
int a = 2;
p = &a;
if (!p)
{
printf("p为空指针");
}
else
printf("p不是空指针");
}
}
你这肯定没办法检查出来的。。。。
p 它是个变量,那么肯定在栈上有个内存,假如地址为 0x1000
a 它是个变量,那么肯定在栈上有个内存,假如地址为 0x2000
给p 赋值,也就是0x1000 内存里面放了一个值为 NULL
给a赋值,也就是 0x2000 内存里面放了一个值为 2
p = &a
现在你把 a 的地址给了p,也就是0x1000 里面本来放的NULL,现在替换成了0x2000
现在懂了吗?
p=&a,那么p就不是空指针了啊
说下你代码中的问题,
①第二个宏定义,是放在第一行才可以。
②NULL不需要你自己宏定义,它本身就在stdio.h头文件内部。
而且NULL 宏定义为0也不准确。
头文件中是这样写的
#define NULL ( (void*) 0)
③头文件后面有个;
生成失败是什么意思?
iF(p!=null)