Kotori 发表于 2017-8-2 07:50:06

S1E26指向指针的指针

指向指针的指针
1>指向指针的指针
      指针指向的是一个变量地址,当然可以指向一个指向变量,也就是指向指针的指针,称为二级指针。同理也有三级指针,四级指针,n级指针等。
int a = 1;
int *p = &a;
int **pp = &p;    //定义了一个指向指针p的指针pp
      注意:在使用指针时注意定义时等号两边的统一。就上面例子而言,pp是一个二级指针,p是一个指针,对p取址就与pp统一。
2>指针数组和指向指针的指针
      char *array[]= {"123", "abc", "!@#"};
char **pp1;
char **pp2;
pp1 = &array;
pp2 = &array;
      利用指向指针的指针来指向指针数组有以下好处:
         1)避免重复分配内存;2)在对存储的数据修改时,只需进行一处修改;3)提高代码的灵活性与安全性。
3>数组指针和二维数组
      要用指针来指向二维数组,需要数组指针。
int a = {{1, 2, 3},
          {4, 5, 6},
          {7, 8, 9}};
int (*p) = a;      //定义数组指针
//打印第二行第二列的数据
printf("%d", *(*(p+1)+1));
      上方定义的数组指针指向一个数组,每个数组包含3个整形。见定义数组指针的语句,因此得到了这个指针的跨度是3个整形。a是个三行三列的数组,每一行是三个整形,刚好对应p指针的跨度,通过对p加一,即可指向下一行。对它进行解引用得到第二行的数组,再通过指针法即可访问到第二行第二列的数据。
         !!!使用指针时考虑指针的跨度问题,跨度不统一则无法等价使用!!!
页: [1]
查看完整版本: S1E26指向指针的指针