初始化
- 初始化是指对指针变量分配一段内存。这可以让他指向合法的地址。
注意:对于指针数组,需要对其每一个元素(指针)都进行初始化,直至没有指针。
- 初始化的几种方式:
- 将已有指针(常量或变量)的值赋值给它。如
int a;int *p=&a;
或int *p=NULL;
(NULL是空指针常量) - 开辟内存空间。如
int *p=(int*)malloc(size(int));
- 将已有指针(常量或变量)的值赋值给它。如
指针变量需要初始化,否则不得进行访问操作,把指针变量都初始化是一个好习惯。因为作为变量,它会被赋一个随机值,这个值可能是指向一个危险的地址。而普通变量可以不初始化,因为他分配到的是一个安全的地址,对这个地址进行访问并不会危害系统。
空指针
是指针常量,在C语言中定义为
#define NULL (void *)0;
注意,leetcode似乎会自动把指针进行初始化为NULL。
如果有必要的话,空指针会被隐式地转换成其他指针类型,以进行赋值运算或者是进行 == 或 != 的比较运算。因此,上述例子不需要使用转型运算符。
为了防止对空指针进行解引用,需要在解引用前进行判断。空类型指针
有指向但未知类型的指针,即(void *)类型,也称为万能指针类型。
使用时必须转换为对应的指针再解引用,不可直接解引用(ERROR:dereferencing void* pointer)
-
野指针
指针未进行初始化。
- 已被销毁(其指向的内存已经被free)的指针变量(注意此时该变量指向的地址不变,但是地址已成为危险的地址)。为了避免,应在free()后,再对指针进行初始化。
- 函数返回了局部变量(位于栈内存中)。
注意区分返回指针内容。
char* GetMemory(int num)
{
char *p = (char *)malloc(sizeof(char) * num);
return p ;//ok,返回堆区的地址值
}