指针数组和数组指针
数组指针
指向数组的指针
作用:方便的操作数组中的各种数据
例:
int* p = arr;
int (*p)[5]
指针数组
存放指针的数组
作用:用来存放多个指针
例:
int *arr[5]
int (*p)[5]和int *p[5]的区别
int (*p)[5] 这个声明定义了一个指针 ,指向一个包含5个整数的数组。
int *p[5] 这个声明定义了一个包含5个元素的数组 ,每个元素都是指向整数的指针
函数指针
格式:
返回值类型(*指针名)(形参列表)
例:int (*p)(int,int) = add;
作用:
利用函数指针,可以动态的调用函数
拓展
函数指针数组
形参完全相同,且返回值一致的函数可以放入同一个函数指针数组内
简易计算器代码案例
#include<stdio.h> int add(int num1,int num2); int reduce(int num1,int num2); int multiply(int num1,int num2); int divide(int num1,int num2); int main() {int num1,num2,choice; //定义一个数组来存放4个函数指针//指针数组int *arr[5] //函数指针int (*p)(int,int) = add;int (*arr[4])(int,int) = {add,reduce,multiply,divide};printf("请输入你要进行计算的两个整数(之间用/分隔):");scanf("%d/%d",&num1,&num2);printf("请选择你要进行什么计算(1:加、2:减、3:乘、4.除):");scanf("%d",&choice);//排除异常输入,当choice等于1、2、3、4时才进行计算if(choice == 1 || choice == 2 || choice == 3 || choice == 4){//int (*p)(int,int)定义一个函数指针//(arr[choice-1])将数组内用户选择的算法函数指针传递给pint (*p)(int,int) = (arr[choice-1]);//调用函数指针pint num = p(num1,num2);printf("结果为%d\n",num);}else{printf("暂时只可以选择加减乘除哦\n");}return 0; } //加法 int add(int num1,int num2) {return num1+num2; } //减法 int reduce(int num1,int num2) {return num1-num2; } //乘法 int multiply(int num1,int num2) {return num1*num2; } //除法,考虑除数不可为0 int divide(int num1,int num2) {if(num2 != 0){return num1/num2;}else{printf("除数不可以为0\n");return 0;} }