指针数组
指针数组是一个用来存放指针的数组
以 int *arr[10] 为例:因为
“[ ]”
比
“ * ”
的优先级高,arr会先和
“[ ]”
结合,构成一个数组,数组名为arr,
int *
修饰的是数组的内容,即数组的元素。所以指针数组是数组。在int *arr[10]中存放了10个
int *
类型的元素。
数组指针
数组指针是指向数组的指针
以 int (*p) [10] 为例:
p先和
“*”结合,形成指针变量然后指向一个放有十10个元素的数组,所以数组指针是指针。
注意:
[ ]的优先级高于
“*”,所以加上
()保证
p 先和
“*”结合形成指针。
指针数组的简单应用:
- #include<stdio.h>
- char arr[] = "abcdef";
- int main()
- {
- printf("%s\n", arr);
- system("pause");
- return 0;
- }
#include<stdio.h>
char arr[] = "abcdef";
int main()
{
printf("%s\n", arr);
system("pause");
return 0;
}
数组指针的简单应用:
- #include<stdio.h>
- char* p = "abcdef";
- int main()
- {
- printf("%s\n", p);
- system("pause");
- return 0;
- }
函数指针
函数指针是指向函数的指针。函数指针可以传递给函数、从函数返回、保存在数组中、赋予另一个函数指针或者调用底层函数。
给出初始化函数指针的例子:
int(*p)=test;
定义函数指针类型:typedef void(*pfun_t)(int)
函数指针数组
函数指针数组是一个存放相同类型数据的存储空间,简单理解函数指针数组就是用来函数地址的数组。
定义函数指针数组:int (part[10])(); part先和[ ]结合,形成数组,数组的内容是int (*)()类型的函数指针。
应用:使用函数指针数组实现加、减、乘、除的运算
- #include<stdio.h>
- int add(int a, int b)
- {
- return a + b;
- }
- int sub(int a, int b)
- {
- return a - b;
- }
- int mul(int a, int b)
- {
- return a * b;
- }
- int div(int a, int b)
- {
- return a / b;
- }
- int main()
- {
- int x, y;
- int input = 1;
- int ret = 0;
- int(*p[5])(int x, int y) = { 0, add, sub, mul, div };
- while(input)
- {
- printf("**************************\n");
- printf("*** 1:add 2:sub ***\n");
- printf("*** 3:mul 4:div ***\n");
- printf("**************************\n");
- printf("请选择:\n");
- scanf_s("%d", &input);
- if ((input <= 4) && (input >= 1))
- {
- printf("请输入数字:");
- scanf_s("%d %d", &x, &y);
- ret = (*p[input])(x, y);
- }
- else
- printf("输入错误\n");
- printf("ret= %d\n", ret);
- }
- system("pause");
- return 0;
- }
#include<stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int main()
{
int x, y;
int input = 1;
int ret = 0;
int(*p[5])(int x, int y) = { 0, add, sub, mul, div };
while(input)
{
printf("**************************\n");
printf("*** 1:add 2:sub ***\n");
printf("*** 3:mul 4:div ***\n");
printf("**************************\n");
printf("请选择:\n");
scanf_s("%d", &input);
if ((input <= 4) && (input >= 1))
{
printf("请输入数字:");
scanf_s("%d %d", &x, &y);
ret = (*p[input])(x, y);
}
else
printf("输入错误\n");
printf("ret= %d\n", ret);
}
system("pause");
return 0;
}
指向函数指针数组的指针
指向函数指针数组的指针是
指针,指向一个数组,该数组的元素是函数指针
定义
指向函数指针数组的指针:
- #include<stdio.h>
- void test(const char* str)
- {
- printf("%s\n", str);
- }
- int main()
- {
- void(*pfun)(const char*) = test;//函数指针pfun
- void(*pfunArr[5])(const char* str);
- pfunArr[5] = test;//函数指针的数组pfunArr[5]
- void(*(*ppfunArr)[10])(const char*) = &pfunArr;//指向函数指针数组 pfunArr的指针ppfunArr
- system("pause");
- return 0;
- }