EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
指针数组和数组指针
& i% z- f, r/ H' m1、字面意思来理解指针数组和数组指针 ) T0 H+ g% s$ U( a
(1)、指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。 ) ?7 u4 N+ j% U! }9 g5 a9 F
(2)、数组指针的实质是一个指针,这个指针指向的是一个数组。 7 k8 o0 R1 c+ e! k5 C& k
2、分析指针数组和数组指针的表达式 9 N6 l; `! M- h& D* R- X( N
(1)、int *p[5]; int(*p)[5]; int *(p[5]); 0 W0 v4 f' v/ G
(2)、一般规律:int *p(p是一个指针); int p[5];(p是一个数组) 8 i9 P, h3 }/ s! ~$ L
总结:我们在定义一个符号时,关键在于:首先搞清楚你定义的符号是谁(第一步:找核心);其次再来看谁跟核心最近、
- j Z2 h% x" ~; l2 m$ k* P谁跟核心结合(第二步,找结合);以后继续往外扩展(第三步:继续向外结合直到整个符号完成)。
0 y: Y8 b g- U! M/ K7 b(3)、如果核心和*结合,表示核心是指针;如果核心和[]结合,表示核心是数组;如果核心和()结合,表示核心是函数; ; `- H1 y, U' a7 |, W: J- z
(4)、用一般规律来分析上述三个表达式:
7 r& t; X+ L4 D( K9 A, I第一个:int *p[5];
8 _/ A7 p- U& k6 {# r" O( u7 |找核心:p;其次[]比*的优先级要高,所以p先和[]结合,所以p是一个数组;然后再和*结合,表示是一个指针数组; 4 P- V4 q3 R3 C+ F/ G
而且数组中存储的全部是int类型的指针变量。
# o6 B. N- A+ ` _6 x t第二个:int (*p)[5]; 1 L* l* D/ e* T4 p. Q7 T
找核心:p;因为有(),所以p先和*结合,表示p是一个指针,然后和[]结合,所以是一个指针数组,数组中的元素全部
6 ~! {. Q6 A$ l( }$ o% o是int类型。 & e4 B4 N0 l F( V8 I7 Z
第三个:int *(p[5]); 7 m1 s% h% x" [3 O% V
这个和第一个一样,()可有可无。 % S0 Y+ S% ~: k! u& V
总结1:优先级和结合性是分析符号意义的关键 + d* x, |. e. j! Z v. Y
在分析C语言问题时不要胡乱去猜测规律,不要觉得C语言无从捉摸,从已知的规律出发按照既定的规则去分析即可。
0 ?6 R4 B6 Y5 B3 b总结2:学会逐层剥离的分析方法
9 @- s+ n2 Q! F* I. G# x找到核心后从内到外逐层的进行结合,结合之后可以把已经结合的部分当成一个整体,再去和整体外边的继续结合。 : ^" ?2 H2 k* i9 N
总结3:基础理论和原则是关键,没有无缘无故的规则
7 w) @& h& w& M' J" W; ^ |