C语言学习篇(17)—–“指针数组”与“数组指针”

C语言学习篇(17)—–“指针数组”与“数组指针”C 语言运算符优先级从上面的图中 我们可以看出优先级 gt OK 接下来我们开始分析 int p 5 因为 的优先级比 高 因此变量 p 先于 5 结合 故 p 是数组 而 int 就是修饰词 总体就是 p 是一个数组 数组有 5 个元素

大家好,欢迎来到IT知识分享网。

之前我们说过指针和数组天生是联系在一起的,因此两者结合应用在实际工程项目代码中也用的比较广泛,同时在很多面试中,面试官也喜欢问“指针数组”和“数组指针”两者的区别和应用。因此今天我们就来讲讲这两者的区别和用法。

C语言学习篇(17)-----“指针数组”与“数组指针”

指针数组和数组指针

本质区别

指针数组:实质是一个数组,指针是修饰词,表明这个数组中存储的内容全部是指针变量

数组指针:实质是一个指针,数组是修饰词,表名这个指针指向的是一个数组

我们从以下几个常见的表达式来分析:

int *p[5]; int (*p)[5]; int *(p[5]);

表达式分析

首先为了分析上面3个表达式, 我们需要说明表达式中出现的运算符(* 和 [])的优先级。

C语言学习篇(17)-----“指针数组”与“数组指针”

C语言运算符优先级

从上面的图中,我们可以看出优先级:[] > *

OK, 接下来我们开始分析:

  • int *p[5]

因为[]的优先级比*高,因此变量p先于[5]结合,故p是数组, 而int *就是修饰词,总体就是p是一个数组,数组有5个元素,数组中的元素都是指针,指针指向的元素类型是int类型的;整个符号是一个指针数组。

  • int (*p)[5]

因为()的原因,p与*先结合,因此p是一个指针,然后再与[5]结合,此时的[5]并成了修饰词;总体就是p是一个指针,指针指向一个数组,数组有5个元素,数组中存的元素是int类型; 整个符号是一个数组指针。

  • int *(p[5])

[]的优先级本来就比*,再加上符号()的作用,p肯定先与[5]结合了,因此p是一个数组, int *是修饰词,总体就是p是一个数组,数组有5个元素,数组中的元素都是指针,指针指向的元素类型是int类型的;这与第一种情况一致(其中运算符()可有可无),整个符号是一个指针数组。

总结

首先要知道一般规律:int *p;(p是一个指针); int p[5];(p是一个数组)

然后判断核心(变量名p)与谁先结合,如果核心和*结合,表示核心是指针;如果核心和[]结合,表示核心是数组(找结合);之后再向外扩展(找修饰词)。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/159657.html

(0)
上一篇 2024-11-30 13:00
下一篇 2024-11-30 13:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信