指针

二级指针

  • B是一个指针变量,其中存放着C的地址,但是B也要占空间的啊,所以B也有地址,B的起始地址是0x00000004,但是B内存中存放的是C的地址,所以B代表0x00000008即B指向的内容的地址。

    1
    2
    3
    B= 0x00000008;  //B指向的内容的地址 
    *B = "一段内容"; //B解引用,也就是B指针指向的C的值
    &B = 0x00000004; //B取地址,B的地址是0x00000004
  • A是二级指针变量,其中存放着B的地址0x00000004,A也有地址,是0x00000000;

    • 若函数需要改变原本的指针指向,函数形参可以使用二重指针,不过使用c++中的引用(对一级指针)效率更高
      1
      2
      3
      4
      *A = B= 0x00000008;  //A解引用也就是B的内容 
      **A = *B = "一段内容"; //B解引用,也就是B指针指向的C的值
      A = &B = 0x00000004; //A存的是B本身的地址,B的地址是0x00000004
      &A = 0x00000000; //A取地址
  • 定义

    1
    2
    3
    int a=1;
    int *p=&a;  // p为a变量的地址,通过*p可以得到a的值
    int **q=&p;   // q为p指针的地址,通过**q可以得到a的值
  • 二级指针是指向指针的指针,所以函数形参是二级指针时,实参应该是一级指针,而非二级指针

    1
    2
    3
    4
    5
    6
    7
    8
    9
    node *tree;
    insert(&tree);

    node *insert(node **root)(){
    }

    //引用写法,就不要二级指针
    node *insert(node* &root){
    }
------ The Happy Ending ------