频道栏目
读书频道 > 软件开发 > c语言 > 深入理解C指针
1.4.1  多层间接引用
2020-01-26 13:21:18     我来说两句
收藏   我要投稿

本文所属图书 > 深入理解C指针

指针是C 语言的一项核心特性,对于指针的掌握程度是区分C 语言新手与老手的重要标志。本书专门研究指针,旨在提供比其他图书更全面和深入的C 指针和内存管理知识。全书巨细靡遗地为读者展现了C 语言编程中最  立即去当当网订购

指针可以用不同的间接引用层级。把变量声明为指针的指针并不少见,有时候称它们为双重指针。一个很好的例子就是用传统的argv 和argc 参数来给main 函数传递程序参数,第5 章将详细讨论。

下例使用了三个数组。第一个数组是用来存储书名列表的字符串数组:

char *titles[] = {"A Tale of Two Cities",

"Wuthering Heights","Don Quixote",

"Odyssey","Moby-Dick","Hamlet",

"Gulliver's Travels"};

还有两个数组分别用来维护一个“畅销书”列表和一个英文书列表。这两个数组保存的是titles 数组里书名的地址,而不是书名的副本。两个数组都声明为字符指针的指针。数组元素会保存titles 数组中元素的地址,这样可以避免对每个书名重复分配内存,确保每个书名的位置唯一。如果需要修改书名,只改一个地方就可以了。

另外两个数组声明如下。每个数组元素包含一个指向char 指针的指针。

char **bestBooks[3];

char **englishBooks[4];

接下来初始化这两个数组,然后打印其中一个元素,如下所示。在赋值语句中,右边的值是通过先做下标索引再取地址的操作得到的。比如说第二个语句把titles 数组中第4 个元素的地址赋给bestBooks 的第2 个元素:

bestBooks[0] = &titles[0];

bestBooks[1] = &titles[3];

bestBooks[2] = &titles[5];

englishBooks[0] = &titles[0];

englishBooks[1] = &titles[1];

englishBooks[2] = &titles[5];

englishBooks[3] = &titles[6];

printf("%s\n",*englishBooks[1]); // Wuthering Heights

本例的内存分配如图1-10 所示。

 

用多层间接引用可以为代码的编写和使用提供更多的灵活性,否则有些操作实现起来会困难一些。在本例中,如果书名的地址变了,那么只需要修改titles 数组即可,不需要修改其他两个数组。

间接引用没有层数限制,当然,使用的层数过多会让人迷惑,很难维护。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.4  指针的常见用法
下一篇:1.4.2  常量与指针
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 全峰安全联盟--致力于做实用的IT技术学习网站