1、指针数组
指针数组是数组,是一个存放指针的数组;
比如:int *arr1[10]:arr1表示存放了10个指针的整型数组,(指针就是地址);
2、数组指针
数组指针是指针;
比如:int *a 表示能够指向整型数据的指针;
int*p[10]中的p先和[ ]结合,所以p代表数组,而int (*p)[10] 中的p先和*结合,说明p是一个指针变量,然后指针指向的是大小为10个整型的数组。需要注意的是,[ ]的优先级高于*,除此之外,也不能忽略p先和谁结合。
3、函数指针
函数的地址可以是函数名,也可以对函数名取地址,需要注意的是函数名具有只读属性,只能做右值。
如下代码,其输出结果均为函数test()的地址:
#include<stdio.h>
void test()
{
printf("haha\n");
}
int main()
{
printf("%p\n",test);
printf("%p\n",&test);
return 0;
}
4、函数指针数组
把函数的地址存放在数组中,这个数组称为函数指针数组。
比如:int(*arr1[10])( ),其数组的内容是int(*)( )类型的函数指针。
函数指针数组的用途:转移表(可用在实现加、减、乘、除功能的计算器中);
5、指向函数指针数组的指针是一个指针,指针指向一个数组,数组的元素都是指针。
void test (const char* str)
{
printf("%s\n",str);
}
void (*pfun)(const char*)=test:函数指针pfun;
void(*pfunarr[10])(const char*);
pfunarr[0]=test; 函数指针数组pfunarr;
void(*(*ppfunarr)[10])(const char*)=&pfunarr:指向函数指针数组pfunarr的指针ppfunarr。