初始化

  1. 初始化是指对指针变量分配一段内存。这可以让他指向合法的地址。

注意:对于指针数组,需要对其每一个元素(指针)都进行初始化,直至没有指针。

  1. 初始化的几种方式:
    1. 将已有指针(常量或变量)的值赋值给它。如int a;int *p=&a;int *p=NULL;(NULL是空指针常量)
    2. 开辟内存空间。如int *p=(int*)malloc(size(int));
  2. 指针变量需要初始化,否则不得进行访问操作,把指针变量都初始化是一个好习惯。因为作为变量,它会被赋一个随机值,这个值可能是指向一个危险的地址。而普通变量可以不初始化,因为他分配到的是一个安全的地址,对这个地址进行访问并不会危害系统。

    空指针

    是指针常量,在C语言中定义为#define NULL (void *)0;
    注意,leetcode似乎会自动把指针进行初始化为NULL。
    如果有必要的话,空指针会被隐式地转换成其他指针类型,以进行赋值运算或者是进行 == 或 != 的比较运算。因此,上述例子不需要使用转型运算符。
    为了防止对空指针进行解引用,需要在解引用前进行判断。

    空类型指针

    有指向但未知类型的指针,即(void *)类型,也称为万能指针类型。

  3. 使用时必须转换为对应的指针再解引用,不可直接解引用(ERROR:dereferencing void* pointer)

  4. 不能进行指针运算。

    野指针

  5. 指针未进行初始化

  6. 已被销毁(其指向的内存已经被free)的指针变量(注意此时该变量指向的地址不变,但是地址已成为危险的地址)。为了避免,应在free()后,再对指针进行初始化。
  7. 函数返回了局部变量(位于栈内存中)。

注意区分返回指针内容。

  1. char* GetMemory(int num)
  2. {
  3. char *p = (char *)malloc(sizeof(char) * num);
  4. return p ;//ok,返回堆区的地址值
  5. }

参考:https://blog.csdn.net/south_d/article/details/78285560

点击查看【music163】