指针数组
int a=10,b=20;
int *arr[2]={&a,&b};//指针数组,数组
printf("%p %p\n\n",arr[0],&a);// 000000000062FE3C 000000000062FE3C 打印结果为两个一样的地址
数组指针
int (*parr)[2];
parr=&arr; //数组指针,指针
printf("%p %p\n\n",&arr,parr+1);// 000000000062FE20 000000000062FE28 parr+1的地址加了8,指向下一个数组
parr=&arr; //数组指针,指针
printf("%p %p\n\n",&arr,parr+1);// 000000000062FE20 000000000062FE28 parr+1的地址加了8,指向下一个数组
函数指针
void funA(){
printf("I am funA!\n");
}
void funB(){
printf("I am funB!\n");
}
printf("I am funA!\n");
}
void funB(){
printf("I am funB!\n");
}
void (*pf)();//函数指针,指针
pf=funA;
pf(); //调用funA() I am funA!
pf=funA;
pf(); //调用funA() I am funA!
函数指针数组
void (*pf2[2])()={funA,funB};//函数指针数组, 数组
pf2[0](); //调用funA() I am funA!
pf2[1](); //调用funB() I am funB!
pf2[0](); //调用funA() I am funA!
pf2[1](); //调用funB() I am funB!
指向函数指针数组的指针
即是指针,保存函数指针数组的地址
源码
#include<stdio.h>
void funA(){
printf("I am funA!\n");
}
void funB(){
printf("I am funB!\n");
}
int main(){
int a=10,b=20;
int *arr[2]={&a,&b}; //指针数组,数组
int (*parr)[2];
parr=&arr; //数组指针,指针
printf("%p %p\n\n",arr[0],&a);
printf("%p %p\n\n",&arr,parr+1);
void (*pf)(); //函数指针,指针
pf=funA;
pf();
void (*pf2[2])()={funA,funB}; //函数指针数组, 数组
pf2[0]();
pf2[1]();
return 0;
}