鱼C论坛

 找回密码
 立即注册
查看: 2137|回复: 0

[技术交流] S1E26指向指针的指针

[复制链接]
发表于 2017-8-2 07:50:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
指向指针的指针
  1>指向指针的指针
        指针指向的是一个变量地址,当然可以指向一个指向变量,也就是指向指针的指针,称为二级指针。同理也有三级指针,四级指针,n级指针等。
  1. int a = 1;
  2. int *p = &a;
  3. int **pp = &p;    //定义了一个指向指针p的指针pp
复制代码

        注意:在使用指针时注意定义时等号两边的统一。就上面例子而言,pp是一个二级指针,p是一个指针,对p取址就与pp统一。
  2>指针数组和指向指针的指针
      
  1. char *array[]  = {"123", "abc", "!@#"};
  2. char **pp1;
  3. char **pp2[2];
  4. pp1 = &array[0];
  5. pp2[0] = &array[1];
复制代码

        利用指向指针的指针来指向指针数组有以下好处:
           1)避免重复分配内存;2)在对存储的数据修改时,只需进行一处修改;3)提高代码的灵活性与安全性。
  3>数组指针和二维数组
        要用指针来指向二维数组,需要数组指针。
  1. int a[3][3] = {{1, 2, 3},
  2.           {4, 5, 6},
  3.           {7, 8, 9}};
  4. int (*p)[3] = a;        //定义数组指针
  5. //打印第二行第二列的数据
  6. printf("%d", *(*(p+1)+1));
复制代码

        上方定义的数组指针指向一个数组,每个数组包含3个整形。见定义数组指针的语句,因此得到了这个指针的跨度是3个整形。a是个三行三列的数组,每一行是三个整形,刚好对应p指针的跨度,通过对p加一,即可指向下一行。对它进行解引用得到第二行的数组,再通过指针法即可访问到第二行第二列的数据。
         !!!使用指针时考虑指针的跨度问题,跨度不统一则无法等价使用!!!

评分

参与人数 1鱼币 +3 收起 理由
小甲鱼 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 10:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表