指针数组 和 数组指针的差别,今天它来了! 首先,祝大家节日快乐!和双十一的一天,莫名其妙就火起来的节日~不过,好在关爱程序员。表示可以支持。 老规矩,用例子的形式,上定义: 补充一个概念: 这三个操作符的优先级:() > [] > * 没错 * 是最卑微的。 指针数组 首先可以看到char *p1[4]只有[]号,所以你可以认为:先做了一个p1[4]的数组。char *指向p1[4]数组的内容,即修饰数组里每一个素。最后我们得到一个包含4个char*指针的数组,简称指针数组。下图比较直观表示了int *p1[4]:
数组指针 先说说char (*p2)[4],发现有()号,所以你可以认为:括号优先,所以创建了char (*p2)的指针。其次是中括号,你可以认为指向的是一个没有名字大小为4的数组,俗称匿名数组。最后我们得到一个指向4个素匿名数组的char型指针。 下图比较直观表示了int (*p2)[4]:
现在你应该明白为啥我说我的例子不好(没办法,节日快乐嘛),因为里面是char(p2)[4]=&p1,这TM有两个* 号。 我稍微解释下: 首先你可以发现,这个指针数组里的素 char*p1[4]={“节”,”日”,”快”,”乐”}; 全是双引号,你可以理解为是一个string型还是中文,但是C语言没有这类型啊啊啊! 我的理解是,指向双引号内容里还一层数组,用来记录里面的中文内容,p是指向指针数据的指针变量。所以使用了char(p2)[4]=&p1; 去值,而不是 char(*p2)[4]=&p1; (这个报错)。 我们换个简单的例子: *(*p2 + i))怎么理解呢? p1是数组名,它代表了数组中第一个素的地址,然后对地址再进行取址操作,所以 p2 代表的是数组自一个素地址的地址, *p2 代表数组第一个素的地址,那么p2自然就是对应的值。 再给个例子: 是不是蒙了? 我也没想到很好的解释对于指针数组输出这一块,欢迎补充下,这三种情况统一的解释。 补充 这个是不能拼接的,因为p1和p2指向的是常量存储区的字符串常量。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/71356.html