EDA365电子论坛网

标题: 指针数组和数组指针 [打印本页]

作者: zxcvbvbnmn    时间: 2020-11-24 14:30
标题: 指针数组和数组指针
指针数组和数组指针
% o7 h. |1 U. x
1、字面意思来理解指针数组和数组指针

4 z9 X6 B; l+ ?, t, @9 Y# Z9 d/ `
(1)、指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。
& o& {1 `; D6 q$ O  l5 _
(2)、数组指针的实质是一个指针,这个指针指向的是一个数组。

3 t5 J( X3 o0 Y
2、分析指针数组和数组指针的表达式

( U1 Y' B$ q6 k
(1)、int *p[5]; int(*p)[5];    int *(p[5]);
$ }* A$ E  e  ~# d+ z2 P
(2)、一般规律:int *p(p是一个指针); int p[5];(p是一个数组)

* W1 Q; m: Z, \7 F" l$ A
总结:我们在定义一个符号时,关键在于:首先搞清楚你定义的符号是谁(第一步:找核心);其次再来看谁跟核心最近、

4 Z" n/ _3 e3 H1 C9 j$ U5 r
谁跟核心结合(第二步,找结合);以后继续往外扩展(第三步:继续向外结合直到整个符号完成)。

: f; O+ ^. |% V5 b% j3 j/ e: _% y
(3)、如果核心和*结合,表示核心是指针;如果核心和[]结合,表示核心是数组;如果核心和()结合,表示核心是函数;

  s; ^. u8 f: B) q; x
(4)、用一般规律来分析上述三个表达式:

8 n2 ~; ~/ }6 P& Z4 c3 r( X
第一个:int *p[5];

9 r/ h* b4 L8 c5 z( [
找核心:p;其次[]比*的优先级要高,所以p先和[]结合,所以p是一个数组;然后再和*结合,表示是一个指针数组;
7 f& W" ~3 P# l/ O
而且数组中存储的全部是int类型的指针变量。

7 q" G9 z6 i) W6 Y
第二个:int (*p)[5];

4 {4 s* o. u8 u9 l/ b
找核心:p;因为有(),所以p先和*结合,表示p是一个指针,然后和[]结合,所以是一个指针数组,数组中的元素全部
* b3 k! K4 o7 N- ]! h+ Z) N
是int类型。
* m) S* `3 `. l4 `$ M; K: m; w
第三个:int *(p[5]);
* P1 \( t. s& H, C: g# ~
这个和第一个一样,()可有可无。
: e* V* L- l3 W- W9 @& k/ \
总结1:优先级和结合性是分析符号意义的关键
' M' K3 ^2 h6 Q3 F$ ]" [' Q( T
    在分析C语言问题时不要胡乱去猜测规律,不要觉得C语言无从捉摸,从已知的规律出发按照既定的规则去分析即可。
* Y4 m* l; Y/ x. D. e+ L5 O7 S( B) L2 K
总结2:学会逐层剥离的分析方法
: y& n1 T7 h8 W! W2 R3 \2 [& Q
找到核心后从内到外逐层的进行结合,结合之后可以把已经结合的部分当成一个整体,再去和整体外边的继续结合。

0 |6 b7 {+ D1 D8 i! ^& r
总结3:基础理论和原则是关键,没有无缘无故的规则
& i2 `/ E# \5 h8 ]4 m% y3 T" I% {

作者: shapeofyou888    时间: 2020-11-24 15:42
指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2