1> 指针数组:int *arr[10]; 它是一个数组,数组的每个元素都是指针,数组占多少个字节有数组本身决定。([]的优先级高于*,所以arr先于[]构成数组,数组类型为int *)
2>数组指针:int (*arr)[10]=&array;它是一个指针,指针指向的数组有10个元素,它在32系统下永远占4个字节。(()的优先级高于[],所以它是一个指针)
3>函数指针:指向函数的指针 函数类型(*指针变量名)(形参列表);
注:函数指针和它所指向的函数的参数个数和类型应该是一致的
函数指针的类型和函数的返回值必需一致
#include<stdio.h>
#include<stdlib.h>
void fun(const char *str)
{
printf("%s\n", str);
}
int main()
{
void(*pfun)(const char *) = &fun;//函数指针,指针有能力指向一个函数
(*pfun)("hello world");
system("pause");
return 0;
}
4>函数指针数组:void * (*pf[3])(char *p);
它是一个数组,数组名为pfun,数组内存了3个指向函数的指针
#include<stdio.h>
#include<stdlib.h>
void fun1(const char *str)
{
printf("fun1:%s\n", str);
}
void fun2(const char *str)
{
printf("fun2:%s\n", str);
}
void fun3(const char *str)
{
printf("fun3:%s\n", str);
}
int main()
{
int i = 0;
void(*pfun[3])(const char *) = { fun1, fun2, fun3 };//函数指针数组
for (i = 0; i < 3; i++)
{
pfun[i]("hello world");
}
system("pause");
return 0;
}
5>指向函数的指针数组的指针: char* (*(*pf)[3])(char *p);
是一个指针,该指针指向一个数组,该数组里存放的都是指向函数的指针。
#include<stdio.h>
#include<stdlib.h>
void fun1(const char *str)
{
printf("fun1:%s\n", str);
}
void fun2(const char *str)
{
printf("fun2:%s\n", str);
}
void fun3(const char *str)
{
printf("fun3:%s\n", str);
}
int main()
{
void *(*a[3])(char *);
void *(*(*pfun)[3])(const char *);
pfun = &a;
a[0] = fun1;
a[1] = &fun2;
a[2] = &fun3;
pfun[0][0]("hello world");
pfun[0][1]("hello world");
pfun[0][2]("hello world");
system("pause");
return 0;
}