指针数组,数组指针_数组和指针的关系

指针数组,数组指针_数组和指针的关系指针数组 和 数组指针的差别,今天它来了!首先,祝大家节日快乐!和双十一的一天,莫名其妙就火起来的节日~不过,好在关爱程序员。表示可以支持。老规矩,用例子的形式,上定义:补充一个概念:这三个操作符的优先级:() > [] > *没错 * 是最卑微

指针数组 和 数组指针的差别,今天它来了!   首先,祝大家节日快乐!和双十一的一天,莫名其妙就火起来的节日~不过,好在关爱程序员。表示可以支持。   老规矩,用例子的形式,上定义:   补充一个概念:   这三个操作符的优先级:() > [] > *   没错 * 是最卑微的。   指针数组   首先可以看到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

(0)
上一篇 2024年 8月 6日 下午10:39
下一篇 2024年 8月 6日

相关推荐

关注微信