C语言中free和NULL的区别:

free(T);是释放T指针指向的地址开头的一片空间,到底有多大必须是由malloc函数事先分配的已知数;但释放T指向的空间不是释放T指针,T一旦声明,在C中就释放不了了,它永远存在。为了防止后面误用T带来危险,常让它等于0(就是NULL);等于NULL的指针叫空指针,是使用不成的,这就避免了误用带来的危险。以后要用T时要重新赋值。

也就是说,free是释放内存指针指向的内存(但指针依然存在),将T赋值为NULL是防止非法操作。

1.为什么指针变量定义时一定要初始化? 
因为你首先要理解一点:内存空间不是你分配了才可以使用只是你分配了之后使用才安全。

为什么要进行对指针初始化呢?
因为指针未被初始化,所以指针所指向的也是随机的,他是个野指针,如果你引用指针,并修改这个指针所指向的内容,而如果这个指针所指向的内容恰好是另外一个程序的数据的话,你将其进行修改了,就会导致另外一个程序可能不能正常运行了。

2.指针变量初始化为NULL是什么意思?
意思是说,强指针变量置空,初始化为NULL,使它不指向任何内容,这样引用它也不会出现上面的问题
总之一点,记住在使用指针之前要对它进行初始化操作就可以了

3、空指针和未初始化的指针

空指针的简单描述:它 “与任何对象或函数的指针值都不相等”。也就是说, 取地址操作符 & 永远也不能得到空指针, 同样对 malloc() 的成功调用也不会返回空指针, 如果失败, malloc() 的确返回空指针, 这是空指针的典型用法:表示 “未分配”或者 “尚未指向任何地方”的指针。

空指针和未初始化的指针:
空指针在概念上不同于未初始化的指针。空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。