EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
指针数组和数组指针 $ x- q8 G9 s5 D" J- G
1、字面意思来理解指针数组和数组指针 ( i& M7 @4 Z3 y
(1)、指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。
V# ^8 P+ `) l B X; g(2)、数组指针的实质是一个指针,这个指针指向的是一个数组。
! o w/ L, a% S/ H! z- s6 H$ x2、分析指针数组和数组指针的表达式 % y2 F/ ]/ n8 J3 O) S
(1)、int *p[5]; int(*p)[5]; int *(p[5]); 7 c& ~* ?& R; E/ ~) s5 w3 P) S* ]
(2)、一般规律:int *p(p是一个指针); int p[5];(p是一个数组) - @1 M* i6 w$ [, o* X/ J7 s( c
总结:我们在定义一个符号时,关键在于:首先搞清楚你定义的符号是谁(第一步:找核心);其次再来看谁跟核心最近、 & r6 R. V4 D. ]& ]6 N+ Q- _6 x
谁跟核心结合(第二步,找结合);以后继续往外扩展(第三步:继续向外结合直到整个符号完成)。 5 J( r' h* z2 Y& b5 U, Q9 ]0 v
(3)、如果核心和*结合,表示核心是指针;如果核心和[]结合,表示核心是数组;如果核心和()结合,表示核心是函数;
8 i9 B1 g) z _(4)、用一般规律来分析上述三个表达式:
! v. B$ c, \) W0 p- y6 K1 m第一个:int *p[5];
& a) D! v& |6 w& q1 ?1 w找核心:p;其次[]比*的优先级要高,所以p先和[]结合,所以p是一个数组;然后再和*结合,表示是一个指针数组; 2 e% I, [# W" m4 o$ g
而且数组中存储的全部是int类型的指针变量。
& H2 E4 I L4 G. P第二个:int (*p)[5]; # h9 A+ g) s- x2 L
找核心:p;因为有(),所以p先和*结合,表示p是一个指针,然后和[]结合,所以是一个指针数组,数组中的元素全部 * u, w! V4 Y+ t- V
是int类型。
' c. c8 i' ]) n第三个:int *(p[5]);
0 a6 K( X! s0 {9 i, W这个和第一个一样,()可有可无。
8 \% I( l- U2 K% R# Q# G6 C+ k总结1:优先级和结合性是分析符号意义的关键 5 C. k5 H, Q. J7 p
在分析C语言问题时不要胡乱去猜测规律,不要觉得C语言无从捉摸,从已知的规律出发按照既定的规则去分析即可。
4 H9 k3 L: Z; k2 L" S总结2:学会逐层剥离的分析方法
5 V% M8 K5 Z' }% M找到核心后从内到外逐层的进行结合,结合之后可以把已经结合的部分当成一个整体,再去和整体外边的继续结合。 * _$ ^1 Q; U. Q
总结3:基础理论和原则是关键,没有无缘无故的规则
( m; K: e. ^4 `& x |