企业邮箱官方网站,文件注入网站,网页建设哪里最便宜,做百度移动端网站软件讲到指针和数组#xff0c;先给大家看一道例题#xff1a; 题目#xff1a;填空练习#xff08;指向指针的指针#xff09; 1.程序分析#xff1a; 2.程序源代码#xff1a; main() { char *s[]{man,woman,girl,bo… 讲到指针和数组先给大家看一道例题 题目填空练习指向指针的指针 1.程序分析 2.程序源代码 main() { char *s[]{man,woman,girl,boy,sister}; char **q; int k; for(k0;k5;k) { ;/*这里填写什么语句*/ printf(%s\n,*q); } } 指向指针的指针是什么呢我们把一个指向指针变量的指针变量成为多级指针变量char **p;这种。 我们再看这道题 char *s[]{man,woman,girl,boy,sister};这时一个字符串数组为什么存放字符串的数组要定义成指针数组呢我们先来看看指针数组是什么 指针数组的实质还是数组是存放指针的数组int *p[] ,(int *)p[]是数组指针指向数组地址的指针这两个概念好像很绕是吧很难分辨在这里博主将自己记忆的方法告诉大家int *p[] 大家可以根据运算符优先级来记忆[]的优先级 *的优先级所以这首先是个数组然后才是指针所以是指针数组(int *)p[]()和[]优先级相等但()是左结合所以(int *)p[]先是指针后是数组所以这是个数组指针。 回到这一题看这一句printf(%s\n,*q);我们知道%s后面跟的应该是一个地址而*p是p中所指的数据所以p地址中保存的还是一个地址这就是多级指针而我们用char **q我们只知道q所指向的首地址后面的数据如何分配我们不得而知所以这道题应该怎么做呢 大家看看我们添加的内容 [cpp] view plaincopy #include stdio.h int main() { char *s[]{man,woman,girl,boy,sister}; char **q; int k; for(k 0;k 5;k) { q s[k]; printf(%s\n,*q); } } 大家看输出结果 [cpp] view plaincopy fsubuntu:~/qiang/shuzu$ gcc -o shuzu5 shuzu5.c fsubuntu:~/qiang/shuzu$ ./shuzu5 man woman girl boy sister fsubuntu:~/qiang/shuzu$ 为什么我们给的是p s[k]而不是*p s[k]呢这里我们应该先理解二维数组 提到二维数组我们又不得不提一维数组一维数组 int a[n] 这里int是我们数据元素的数据类型a是什么a是数组名代表数组的首地址是数组第一个元素的地址也就是可以说a是int a[n]的地址a[0]也是这里记住a是地址常量是常量常量常量重要的事说三遍常量的特性是什么不能对其赋值大家记住这一点[]是变址运算符所以*(ai)和a[i]无条件等价!n是数据的偏移量是数据的偏移量而不是字节的偏移量这点和指针的*p一样是数据的偏移量因为我们数组里放的是整型数据也可能是字符型数据所占字节大小是不一样的所以是数据的偏移量 我们回到二维数组 以int [3][4]为例如下图 我们知道a[3]中a是地址a[3][4]呢a这里也是地址存放的是什么数据呢看图就知道存放的是a[0] a[1] a[3]而a[0] a[1] a[2]是什么呢其实是地址地址里指向的分别是a[0][0] a[1][0] a[2][0]的数据那我们是不是也可以将二维数据当成一个二级指针来看呢大家思考一下。 博主思考了一下说a里面存放的是a[0] a[1] a[2]的地址不太确切 但a[0] a[1] a[2]在这里确实是地址 上面说到二维数组是否可以看成二级指针当然不能这样看大家应该知道a确实是代表地址但它与指针有什么区别呢大家看a[1] 的地址如何表示呢是a1,指针怎么表示呢是p1好像是一样哦但大家应该明白这里 a 是常量 p是变量a 1 中 a 的值没有发生变化数组里面所有数据的地址都是由唯一的常量 a 来确定的 而p 1, p 的值已经发生了变化因为 p 是变量 我们再看看char *s[]{man,woman,girl,boy,sister}为什么要加*呢因为存放的是字符串啊。字符串用地址来表示的啊所以二级指针 二维数组 指针数组 这几个概念有时很容易把人搞晕大家一定要注意分辨 今天先写到这后面会指针数组的深入内容