12深入理解C指针之---指针多层间接引用
该系列文章源于《深入理解C指针》的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教。
一、指针多层引用
1、定义:指针可以用不同的间接引用层级,通常使用多重指针或字符数组来实现
2、特征:
1)、使用二重字符指针表示
2)、使用字符数组表示
3)、使用多重字符指针表示
3、应用:
1)、主函数中char **argc参数用法
2)、主函数中char *argc[]参数用法
3)、二重指针char **arrName[]用法
代码如下:1)、主函数中char **argc参数用法
1 /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 2 * 作者代号: *** :guochaoxxl 3 * 版权声明: *** :(魎魍魅魑)GPL3 4 * 联络信箱: *** :guochaoxxl@gmail.com 5 * 文档用途: *** :深入理解C指针 6 * 文档信息: *** :~/WORKM/StudyCode/CodeStudy/cnblogs_understanding_and_using_c_pointers/chapter1/test05.c 7 * 修订时间: *** :2017年第39周 10月01日 星期日 上午08:56 (274天) 8 * 代码说明: *** :演示char **argv用法 9 * *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/ 10 #include <stdio.h> 11 12 int main(int argc, char **argv) 13 { 14 for(int i = 0; i < argc; i++){ 15 printf("The main argument %d is %s\n", i, *(argv + i)); 16 } 17 printf("\n"); 18 19 return 0; 20 }
2)、主函数中char *argc[]参数用法
1 /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 2 * 作者代号: *** :guochaoxxl 3 * 版权声明: *** :(魎魍魅魑)GPL3 4 * 联络信箱: *** :guochaoxxl@gmail.com 5 * 文档用途: *** :深入理解C指针 6 * 文档信息: *** :~/WORKM/StudyCode/CodeStudy/cnblogs_understanding_and_using_c_pointers/chapter1/test05.c 7 * 修订时间: *** :2017年第39周 10月01日 星期日 上午08:56 (274天) 8 * 代码说明: *** :演示char *argv[]用法 9 * *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/ 10 #include <stdio.h> 11 12 int main(int argc, char *argv[]) 13 { 14 for(int i = 0; i < argc; i++){ 15 printf("The main argument %d is %s\n", i, argv[i]); 16 } 17 printf("\n"); 18 19 return 0; 20 }
3)、二重指针char **arrName[]用法
1 /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 2 * 作者代号: *** :guochaoxxl 3 * 版权声明: *** :(魎魍魅魑)GPL3 4 * 联络信箱: *** :guochaoxxl@gmail.com 5 * 文档用途: *** :深入理解C指针 6 * 文档信息: *** :~/WORKM/StudyCode/CodeStudy/cnblogs_understanding_and_using_c_pointers/chapter1/test07.c 7 * 修订时间: *** :2017年第39周 10月01日 星期日 上午09:26 (274天) 8 * 代码说明: *** :演示char **bestBooks[3]的用法 9 * *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/ 10 #include <stdio.h> 11 12 int main(int argc, char **argv) 13 { 14 //定义书名的数组 15 char *titles[] = {"A Tale of Two Cities", 16 "Wuthering Heights", 17 "Don Quixote", 18 "Odyssey", 19 "Moby-Dick", 20 "Hamlet", 21 "Gulliver's Travels", 22 }; 23 char **bestBooks[3]; //最好的图书 24 char **englishBooks[4]; //英文图书 25 26 bestBooks[0] = &titles[0]; 27 bestBooks[1] = &titles[3]; 28 bestBooks[2] = &titles[5]; 29 30 englishBooks[0] = &titles[0]; 31 englishBooks[1] = &titles[1]; 32 englishBooks[2] = &titles[5]; 33 englishBooks[3] = &titles[6]; 34 35 for(int i = 0; i < 3; i++){ 36 printf("The bestBooks is: %s\n", *bestBooks[i]); 37 } 38 printf("\n"); 39 for(int j = 0; j < 4; j++){ 40 printf("The englishBooks is: %s\n", *englishBooks[j]); 41 } 42 43 return 0; 44 }
代码都很简单,自行理解即可。
人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具