捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >知识点备忘 > 正文
15 2018.02

S1E26:指向指针的指针

点击次数:1207 更新时间:2018/2/15 15:57:16  【打印此页

知识点回顾:


1. 指向指针的指针

只要你懂得了指针的概念,那么指向指针的指针也就没什么了不起了。

举个栗子:

#include <stdio.h>

int main()
{
        int num = 520;
        int *p = #
        int **pp = &p;

        ……

        return 0;
}


上边代码中,p 定义的是指向整型的指针,也就是说指针变量 p 里边存放的是整型变量 num 的地址。所以,*p 就是对指针进行解引用,得到了 num 的值。而 pp 就是指向指针的指针,pp 存放的是指针变量 p 的地址。所以,对 pp 进行一层解引用(*pp)得到的是 p 的值(num 的地址),对 pp 进行两层解引用(**pp)相当于对 p 进行一层解引用(*p),得到整型变量 num 的值。


2. 指针数组和指向指针的指针

使用指向指针的指针来指向数组指针,至少有两个优势:

 

·         避免重复分配内存(虽然我们进行了多个分类,但每本书的书名只占据一个存储位置,没有浪费)

·         只需要进行一处修改(如果其中一个书名需要修改,我们只需要修改一个地方即可)


这样,代码的灵活性和安全性都有了显著地提高。


3. 再讲数组指针和二维数组

如何利用指针来指向二维数组呢?

答:需要使用数组指针。

#include <stdio.h>

int main()
{
        int array[3][4] = {
                {0, 1, 2, 3},
                {4, 5, 6, 7},
                {8, 9, 10, 11}};
        int (*p)[4];
        int i, j;

        p = array;
        for (i = 0; i < 3; i++)
        {
                for (j = 0; j < 4; j++)
                {
                        printf("%2d ", *(*(p+i)+j));
                }
                printf("\n");
        }

        return 0;
}


程序实现如下:

 

分析:

p 是一个指向数组的指针,这个数组包含了 4 个元素,所以  p的跨度是 4 * sizeof(int),然后把二维数组第一个元素的地址赋值给 p。这时,p+1 恰好是二维数组一行的跨度。对 p+1 进行解引用,得到的就是二维数组第二行第一个元素的首地址。所以我们可以通过数组指针的方式来访问二维数组。


大家发现,随着我们课程的深入,对指针的剖析也是越发的惊心动魄,所以可能有时候大家学着学着觉得懵圈了,这很正常,你需要摸着自己的胸部,然后问一下自己:每节课学完之后有没有认真总结思考,有没有按时完成课后作业,还是说只是为了看视频而看视频?我总感觉一天看五六节课的童鞋,会错过很多思考和练习的机会。

记住,欲速则不达!C语言是一门值得你深入探讨的优秀编程语言,它不是快餐。

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:1207 更新时间:2018/2/15 15:57:16  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修