指针数组与数组指针
1.从字面意思来分析指针数组与数组指针
(1)指针数组的实质就是一个(数组),只是这个数组中存在的所有元素是指针变量。(指针数组与数组没有区别)
(2)数组指针的实质是一个(指针),指针指向的是一个数组。
2.指针数组与数组指针表达式
(1)int *p[5]; int (*p)[5]; int *(p[5]);
(2) 一般规律: int *p;(p是一个指针);int p[5](p是一个数组)
总结:在定义一个符号时,关键在于首先要搞清楚需要定义的符号是什么?(找出谁是关键)
其次咋看谁跟核心最近,谁跟核心结合(找结合)
int *p[5];
分析:首先里面p是整个表达式的核心,而*号和[] 号同时出现,就需要通过符号的优先级来决定p到底先和谁结合,
上面这个表达式[]号的优先级比*的优先级要高。所以这里的p是先和[]号结合(从这个地方就能看出来当前表达式是
一个数组),然后再和*号结合(从这个地方可以看出当前表达式是一个指针数组),最后和int结合 所以这个表达
式 是一个名字叫做p的的指针数组,即其本质是一个数组。只是说这个数组中的所有元素是int *类型的数据。
综上所述:p是一个数组,数组有五个元素大,数组中的元素是指针,指向所有的元素是int 整个符号就是一个数组指针。
int (*p)[5];
分析:首先里面p是整个表达式的核心,由于这里加入了一个()所以优先结合*p(即这里是一个指针),然后整个*p在于[]结合
组成是一个数组。
综上所述:p是一个指针,指针指向一个数组,数组中有五个元素,数组中的元素是int型变量,当前表达式 是一个指针数组。
int *(p[5]);由于[]的优先级本身就比*号的优先级要高所以 当前表达式 等同于 int *p[5];
注意:符号的优先级到底有什么用?其实是决定当两个符号一起作用的时候决定那个符号先运算,那个符号后运算
通过查c语言优先级表