指针数组
定义 int *p[n];
1.[]优先级高,先与p结合成为一个数组,
2.再由int*说明这是一个整型指针数组,
3.它有n个指针类型的数组元素。
数组指针
定义 int (*p)[n];
1.()优先级高,首先说明p是一个指针,
2.指向一个整型的一维数组,
3.执行p+1时,p要跨过n个整型数据的长度
总结:
数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。
指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。
比如要表示数组中i行j列一个元素:
* ( p[ i ]+j )、* ( * ( p+i )+j )、( * ( p+i ) )[ j ]、p[ i ] [ j ]
函数指针
举例如下:
#include<stdio.h>
#include<Windows.h>
void function()
{
printf("调用\n");
}
int main()
{
void(*pfun)() = &function;
(*pfun)();
system("pause");
return 0;
}
函数指针数组
拿一个数组,用它来放函数指针。
void (*fun[3])(int x);//函数指针数组
void (*fun)(int x); //函数指针
举例:
#include <stdio.h>
void add(char *name)
{
printf("Add %s successfully!\n",name);
}
void delete(char *name)
{
printf("Delete %s successfully!\n", name);
}
void find(char *name)
{
printf("Find %s successfully!\n", name);
}
void main()
{
void(*funcPointerArray[3])(char *name);
funcPointerArray[0] = add;
funcPointerArray[1] = delete;
funcPointerArray[2] = find;
printf("Input 0~2 to execute the function:");
int num;
scanf("%d", &num);
printf("Add some information:");
char info[100];
scanf("%s", &info);
funcPointerArray[num](info);
}
可以避免写大量的switch case 语句。
指向函数指针数组的指针
指向函数指针数组的指针是一个指针指向一个数组 ,数组的元素都是函数指针。
void test(const char* str)
{
printf("%s\n", str);
}
int main()
{
// 函数指针 pfun
void (*pfun)(const char*) = test;
// 函数指针的数组 pfunArr
void (*pfunArr[5])(const char* str);
pfunArr[0] = test;
// 指向函数指针数组 pfunArr 的指针 ppfunArr
void (*(*ppfunArr)[10])(const char*) = &pfunArr;
return 0;
}