「C语言」指针数组 数组指针 指针函数 函数指针
相信很多人和我一样,有着这样的恐惧,那就是这四个玩意怎么也分不清,这都是啥啥啥啥呢?今天我们来具体分析一下。其实要具体了解这四个概念,只需要了解符号 优先级 ,并关注 最后两字 ,你就成功了一半。
符号优先级
在一个表达式中可能包含多个不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现运算错误。所以表达式必须按一定的顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。所以请牢牢记住下面三个符号的优先级判断,这对今天理解这四个概念,十分重要!
(内) > [ ] > *
指针数组
指针数组:一个数组,数组的元素是一个指针!
常用形式: 类型 *变量[长度]
int *p1[10];
由于[]的优先级比*更高
p1表示一个10个元素的数组
int* 表示元素是一个指向int的指针
即:p1[0],p1[1]...各自装着一个int指针
*/
指针数组比较容易理解,就是一个数组,里面装的是指针!
数组指针
数组指针:一个指针,而指针的指向是一个数组!
常用形式: 类型 (*变量)[长度]
有时候我们也把数组指针成为“行指针”,遇到多维数组的时候经常使用。
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4];
p = (int(*)[4])a;
for(int i=0;i<3;i++) {
for(int j=0;j<4;j++) {
printf("%d\n", *(*(p+i)+j));
}
指针函数
指针函数:一个函数,函数的返回值是一个指针!
常用形式: 返回类型 * 函数名(形参类型 形参名)
int * max(int *a,int *b) {
return (*a > *b) ? a : b;
}
指针函数也比较容易理解,就是返回的是一个指针的函数。
函数指针
函数指针:一个指针,指针指向的是一个函数!
常用形式: 返回类型 (*变量)(形参类型)
int (*func) (float, float);
(*func)表明func是一个指针,指向一个函数
前面int,表示该返回值
后面的两个float表明该函数的两个形参类型
*/
举个例子:
int sum(int a, int b) {
return a + b;
int main() {