数组指针和指针数组和二重指针-创新互联

数组指针和指针数组从字面上来看很纠结,有时候我也搞不清,分不清哪样的是数组指针,哪样的是指针数组。这东西就不是靠记忆的,我们采取分析加对比分层剥离的方法分析。

目前创新互联公司已为上千家的企业提供了网站建设、域名、网站空间、网站改版维护、企业网站设计、扎鲁特旗网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

1.概念区别
1.1.数组指针:定语在前,主语在后。也就是数组的指针。一个指针,它指向一个数组。
1.2.指针数组:定语在前,主语在后。也就是指针 的数组。一个数组,里面的元素都是指针。

2.指针和数组分别定义的符号
2.1 int * p;
分析:
第一步:找核心,核心是p。
第二步:逐层剥离,p和*结合是指针。所以int*p;是定义了一个指针

2.2. int p[5];
分析:
第一步:找核心,核心是p。
第二步:逐层剥离,p和[]结合是数组。所以int p[5];是定义了一个数组。

3.指针数组和数组指针分别定义的符号
3.1 int * p[5]
分析:
第一步:找核心,核心是p。
第二步:逐层剥离,这时候p先和[]结合还是先和*结合,查优先级表得到[]优先级更高。所以p先和[]结合成为数组。
第三步:继续逐层剥离,p[5]这个数组再和*结合
第四步:得到结果,有一个数组有5个元素,其元素都是指针,即指针数组。

3.2. int (* p)[5];
分析:
第一步:找核心,核心是p。
第二步:逐层剥离,p和谁结合?小括号优先级更高,所以p先和*结合成为指针,
第三步:继续逐层剥离,*p这个指针再和数组结合,
第四步:得到结果,有一个指针,该指针指向一个数组,即数组指针。

4.一维指针int * 和数组指针int (*)[]的类型匹配问题
4.1.
int * p;
int a[5];
p = a; //类型匹配吗?

别怕,我们来分析
(1)p和结合是指针,再和int结合,说明,p是一个指向int类型变量的指针,类型为int
(2)a是数组名,a做右值表示数组首元素的首地址,首元素是int类型,首元素的地址是int*类型。
(3)得出结论,p和a类型一致。都是int*类型的。

4.2.
int * p;
int a[5];
p = & a; //类型匹配吗?

我们再来分析
(1)p和结合是指针,再和int结合,说明,p是一个指向int类型变量的指针,类型为int
(2)a是数组名,&a做右值表示整个数组的首地址,也就是一个指向数组的指针,即数组指针,其类型为 int(*)[]
(3)第三步:得出结论,p和&a类型不匹配,p的类型是int*,&a的类型是int(*)[]

5.二维指针int * * p1;和指针数组 int*p2[5];(实际中用的比较少,如果用到二维指针肯定是和指针数组连用)
5.1.指针数组
int *p[5];

分析:
第一步:p先和[]结合是数组,再和*结合,也就是数组里面的元素都是指针,也就是说,数组中的元素,p0,p1,p2,p3,p4,都是指针,那数组名p是什么类型?
第二步:数组名p做右值时表示整个数组的首地址,整个数组都是指针,那p就是指针的指针了,即p的类型是指向指针的指针,二重指针。
重要:二重指针就是指针数组指针
分析能力是很重要的,比学到知识本身重要,我们永远不能学完所有的知识,但我们可以提高学习的效率。 学习本身比学习更总要。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

文章题目:数组指针和指针数组和二重指针-创新互联
文章出自:https://www.cdcxhl.com/article26/cscpcg.html

成都网站建设公司_创新互联,为您提供标签优化手机网站建设虚拟主机云服务器营销型网站建设微信小程序

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设