EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
指针数组和数组指针
( J& M: h7 n; E8 E1、字面意思来理解指针数组和数组指针 7 l! L0 n: V3 ?3 {! R
(1)、指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。
. S# U, a5 @$ d. G4 l8 v" E' d) r(2)、数组指针的实质是一个指针,这个指针指向的是一个数组。 / _( U( b, }/ @8 p) a
2、分析指针数组和数组指针的表达式
* p( m# F# V3 A/ H, t$ @" D(1)、int *p[5]; int(*p)[5]; int *(p[5]); 5 J; Y- K8 z8 {5 i! [
(2)、一般规律:int *p(p是一个指针); int p[5];(p是一个数组)
5 o4 _- d! O. G$ c( c! s* e总结:我们在定义一个符号时,关键在于:首先搞清楚你定义的符号是谁(第一步:找核心);其次再来看谁跟核心最近、
$ M: ~$ o3 n& p+ @8 d/ M, Y谁跟核心结合(第二步,找结合);以后继续往外扩展(第三步:继续向外结合直到整个符号完成)。
) w9 v3 U6 O; R3 J5 `3 U$ E) Z(3)、如果核心和*结合,表示核心是指针;如果核心和[]结合,表示核心是数组;如果核心和()结合,表示核心是函数;
2 Y; l G& o" B# J. _) }(4)、用一般规律来分析上述三个表达式: 6 O0 t- }. J0 f$ I$ ]* ]
第一个:int *p[5];
) x; r$ B* a$ s$ Z4 T找核心:p;其次[]比*的优先级要高,所以p先和[]结合,所以p是一个数组;然后再和*结合,表示是一个指针数组; ! i) B& s- A7 U& E
而且数组中存储的全部是int类型的指针变量。 ; Y) Z3 ~/ R) I& Z
第二个:int (*p)[5];
% Y1 \1 u: ^* E! c% Z" V6 g* w找核心:p;因为有(),所以p先和*结合,表示p是一个指针,然后和[]结合,所以是一个指针数组,数组中的元素全部
* R5 p; o% s G& _. b3 C$ t( r是int类型。 2 S0 x" K6 s U# B, \) o! j
第三个:int *(p[5]);
u' B' S" [, g+ b这个和第一个一样,()可有可无。
" n x/ X: Q% G& Z: g% a x总结1:优先级和结合性是分析符号意义的关键 4 P# ^, r. | O( V; ?) z5 k' y4 l
在分析C语言问题时不要胡乱去猜测规律,不要觉得C语言无从捉摸,从已知的规律出发按照既定的规则去分析即可。 . s% p% E' c- \6 u* k# d- \! Z- K7 l) [
总结2:学会逐层剥离的分析方法
4 T2 ^8 ^& c4 x/ \找到核心后从内到外逐层的进行结合,结合之后可以把已经结合的部分当成一个整体,再去和整体外边的继续结合。 - j9 i; e B; Z& S x$ l
总结3:基础理论和原则是关键,没有无缘无故的规则 ' v! e3 [0 P& q- [# }8 @! b
|