EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
指针数组和数组指针
4 Q, m& f4 [# B4 J9 m4 c1、字面意思来理解指针数组和数组指针 1 y/ q$ O. w8 ]7 H6 G5 _7 f
(1)、指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。
) ~9 C: i1 Y* w6 ]* m(2)、数组指针的实质是一个指针,这个指针指向的是一个数组。
. D g( V! T `& v% x2、分析指针数组和数组指针的表达式
$ f: b1 j" A9 t& |(1)、int *p[5]; int(*p)[5]; int *(p[5]);
! v! H" W- |- T# j" M0 s(2)、一般规律:int *p(p是一个指针); int p[5];(p是一个数组)
5 `' }9 Z$ F% P5 ~' |; ~0 O总结:我们在定义一个符号时,关键在于:首先搞清楚你定义的符号是谁(第一步:找核心);其次再来看谁跟核心最近、
: l1 z, ]; @+ B" q; F谁跟核心结合(第二步,找结合);以后继续往外扩展(第三步:继续向外结合直到整个符号完成)。
1 J" D! ^$ l. j, e: A M(3)、如果核心和*结合,表示核心是指针;如果核心和[]结合,表示核心是数组;如果核心和()结合,表示核心是函数; ' ?3 o' i1 g. c5 P
(4)、用一般规律来分析上述三个表达式:
2 i4 p# V3 v6 O第一个:int *p[5];
% F9 m! U3 f$ a( i3 |找核心:p;其次[]比*的优先级要高,所以p先和[]结合,所以p是一个数组;然后再和*结合,表示是一个指针数组;
8 x) ^6 y. G7 i0 ]- v3 V+ K而且数组中存储的全部是int类型的指针变量。
! o' E$ j1 v4 Q1 W/ f第二个:int (*p)[5];
" b0 k* {$ z9 a( |, J找核心:p;因为有(),所以p先和*结合,表示p是一个指针,然后和[]结合,所以是一个指针数组,数组中的元素全部 ( ^& O- `% n, P3 Y. {7 m
是int类型。
0 P% R" U4 e4 }+ V) Q第三个:int *(p[5]); - z' I Y/ L+ t/ a( J
这个和第一个一样,()可有可无。 ( ]3 m9 f E: V
总结1:优先级和结合性是分析符号意义的关键 " [0 p& v' G3 o7 w4 m& s# j
在分析C语言问题时不要胡乱去猜测规律,不要觉得C语言无从捉摸,从已知的规律出发按照既定的规则去分析即可。 $ e: u/ O. k- I$ M7 D
总结2:学会逐层剥离的分析方法
4 \( M, e, e+ a) p7 R3 Y找到核心后从内到外逐层的进行结合,结合之后可以把已经结合的部分当成一个整体,再去和整体外边的继续结合。
5 L# k5 _2 v5 P总结3:基础理论和原则是关键,没有无缘无故的规则 1 h% t' V$ i2 C1 |3 s. A9 n: i( C
|