指针——C的灵魂
一、指针数组认知(面试:和数组指针的区别)
之前我们学过数组指针,即指向数组的指针,那么什么是指针数组呢?注意!这两个概念不要搞混。
指针数组就是:一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。下面定义一个指针数组:
int *p[4];
由于
[
]
[]
[] 比
∗
*
∗ 优先级高,因此
p
p
p 先与
[
4
]
[4]
[4] 先结合,形成
p
[
4
]
p[4]
p[4] 形式,这显然是数组形式,表示
p
p
p 数组有4个元素。然后再与
p
p
p 前面的 “
∗
*
∗ “ 结合, “
∗
*
∗ “ 表示此数组是指针类型的,每个数组元素(相当于一个指针变量),可以指向一个整型变量。
注意 不要写成:
int (*p)[4]; //这是指向一维数组的指针变量
二、指针数组实战
1.普通指针数组
定义一个指针数组,承接相应的地址,并且通过对指针数组遍历打印:
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int* p[4] = {&a,&b,&c,&d};
for(int i = 0;i<4;i++){
printf("%d ",*(p[i]));
}
return 0;
}
运行结果:
2.函数指针数组
定义一个数组,里面存放函数指针,并且遍历函数指针调用相应函数:
#include<stdio.h>
#include<stdlib.h>
int getMax(int data1, int data2)
{
return data1>data2 ? data1:data2;
}
int getMin(int data1, int data2)
{
return data1<data2 ? data1:data2;
}
int getSum(int data1, int data2)
{
return data1+data2;
}
int main()
{
int a = 10;
int b = 20;
int ret;
int (*pfunc[3])(int , int ) = {getMax, getMin, getSum};
for(int i = 0;i<3;i++){
ret = (*pfunc[i])(a, b);
printf("ret = %d\n",ret);
}
return 0;
}
运行结果: