全站flash网站珠海哪个建设网站建设好
全站flash网站,珠海哪个建设网站建设好,湛江做网站设计,网页模板源码Hello#xff0c;很有缘在这篇文章上我们相遇了#xff0c;那么我就用题目巩固我们多级指针的知识#xff0c;当然这里的题目是比较有点难度的#xff0c;我们需要有点基础呀#xff0c;如果你能轻松理解题目那说明你对指针的了解已经很有基础了呢#xff0c;那废话不多说…Hello很有缘在这篇文章上我们相遇了那么我就用题目巩固我们多级指针的知识当然这里的题目是比较有点难度的我们需要有点基础呀如果你能轻松理解题目那说明你对指针的了解已经很有基础了呢那废话不多说开始进入正题了~
望喜欢 操作多级指针加减题
指针加减看似简单但有些题目却很犀利如下题第一次看到它我的大脑也是很混乱呢现在已经是已经了解通透了现在就分享给你们了这道题可以弄出很多知识点需要认真剖析。
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.hint main()
{char* arr1[] {abcdefg,ABCDEF,qwertyu,QWERTY};char** arr2[] { arr1 3,arr1 2,arr1 1, arr1 };char*** arr3 arr2;printf(%s\n,**arr31 );printf(%s\n,**arr21 );printf(%s\n,*--*arr33 );printf(%s\n, **arr3 2);printf(%s\n, arr3[-2][-1]3);printf(%s\n, **arr3);return 0;
} 我们先看一下答案吧
好现在我们就仔细剖析为什么计算机是这样打印的。
我们且看第一第二个打印结果的剖析
printf(%s\n,**arr31 ); printf(%s\n,**arr21 );
这里二级指针和三级指针为啥打印结果却一样可能有人会想三级针针不应该在加一个“ * ”吗那么我们就来解析一下 图中其实也解析了其实arr3里储存的是arr2[0]的地址也就是你可以把arr3等价于arr2用所以这里的第一行和第二行是一样的结果且arr3用两个指针就能打印字符串这里是我们先用两个“ * ”指向到字符串“QWERTY”后面加1是最后执行的然后指针指向字符串的第二位所以打印结果如WERTY”。 然后到第三行打印结果的解析
printf(%s\n,*--*arr33 );
图中我已经层层解析 我们要知道- -和“ * ”的优先级是比较高的所以这里我们
先地址指向储存arr12的地址即arr2[1]的地址解引用后得到arr12再到减减- -变成arr11再然后解引用得到“ABCDEF”字符串最后 3得到字符D的地址打印后往后打印 “DEF” 再然后是第四行打印结果的解析
printf(%s\n, **arr3 2);
因为前面代对arr3加1过现在arr3是指向存储arr2的地址这里再次使得arr3此时指向
arr11的存储地址即arr2 [2] 的地址两次解引用后得到字符串”ABCDEF“的字符”A“的地址再加2得到字符”C“的地址然后再次打印得到的结果就是”CDEF“ 再然后到第五行的打印结果的解析
printf(%s\n, arr3[-2][-1]3); 这里需要先了解一个知识点 arr3[-2] 其实等价于 *arr3-2 目前我们arr3指向的是arr2[2]的地址即储存arr11的地址那么 -2 后解引用后得到arr13的存储地址即arr2 [0]处的地址然后后面就是相当于*arr13-1括号中运算完后得到*arr12解引用后得到字符串”qwertyu“的首地址再加3得到字符 ”r“的地址打印后就是得到”rtyu“。 现在到最后一行很简单我们只需要知道现在arr3指向的是arr2中的哪一处的地址可能很多人就想上面已经指向arr2[0]的地址那么现在打印“QWERTY” 如果这么想那就是错误的想法了。
printf(%s\n, **arr3);
这里上面的-2只是解引用时-2指向arr2[0]的地址但本身并未改变arr3所以此时arr3指向的还是arr11的存储地址所以两次解引用后便是”ABCDEF“了。 希望我的这篇文章让您可以理解通透指针的加减知识哦
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89194.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!