【C语言】函数指针与指针函数
文章目录
- @[TOC](文章目录)
- 前言
- 一、指针数组
- 二、数组指针
- 三、函数指针
- 四、指针函数
- 五、函数指针数组
- 六、回调函数
- 七、参考资料
- 总结
文章目录
- @[TOC](文章目录)
- 前言
- 一、指针数组
- 二、数组指针
- 三、函数指针
- 四、指针函数
- 五、函数指针数组
- 六、回调函数
- 七、参考资料
- 总结
前言
使用工具:
1.DEVC++
提示:以下是本篇文章正文内容,下面案例可供参考
一、指针数组
优先级关系:( ) > [ ] > *。
char *p[4]是个数组,那就要干数组的活。指针数组的意思就是,这个数组里面的元素都是指针。指针的类型是char ,指向的内容也是char 型。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*++++++++++++++++++++++++++++++++++++++*/
/* 声明一个指针数组 */
/*++++++++++++++++++++++++++++++++++++++*/char *point_array[4];char array[5] = {'1', '2', '3', '4', '\0'}; // 使用字符初始化point_array[0] = &array[0]; // 示例:只初始化第一个指针point_array[1] = &array[1];point_array[2] = &array[2];point_array[3] = &array[3];printf("*point_array[0] = %d, *point_array[1] = %d, *point_array[2]= %d, *point_array[3] = %d\n",\*point_array[0], *point_array[1], *point_array[2], *point_array[3]);printf("array[0] = %d, array[1] = %d, array[2] = %d, array[3]= %d\n",\array[0], array[1], array[2], array[3]);system("pause");return 0;
}
二、数组指针
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*++++++++++++++++++++++++++++++++++++++*/
/* 声明一个数组指针 */
/*++++++++++++++++++++++++++++++++++++++*/int (*array_point)[5];int array[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};array_point = array;printf("*array_point[0]= %d, *array_point[1]= %d, *array_point[2] = %d, *array_point[3]= %d\n",\*array_point[0], *array_point[1], *array_point[2], *array_point[3]);printf("*array[0] = %d, *array[1] = %d, *array[2] = %d, *array[3] = %d\n",\*array[0], *array[1], *array[2],*array[3]);system("pause");return 0;
}
三、函数指针
#include <stdio.h>// 相加函数
int add(int x, int y)
{return x + y;
}// 相减函数
int subtract(int x, int y)
{return x - y;
}/*++++++++++++++++++++++++++++++++++++++*/
/* 声明一个函数指针 */
/* 1.指针指向的函数参数类型要相同 */
/* 2. 是一个指针,无需返回值 */
/* 3.可以不用声明变量,因为无需传参 */
/*++++++++++++++++++++++++++++++++++++++*/
int (*fun)(int , int ); int main()
{fun = add; //函数指针等价于add函数printf("相加:%d\n", (fun)(1,2));fun = subtract; 函数指针等价于subtract函数printf("相减:%d\n", (*fun)(1, 2));
}
输出结果: 相加:3相减:-1
四、指针函数
#include <stdio.h>// 相加函数
int add(int x, int y)
{return x + y;
}// 相减函数
int subtract(int x, int y)
{return x - y;
}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* 声明一个指针函数 */
/* 1.fun没有被括起来,fun后面跟着括号可以进行传参 */
/* 如: int (*fun(int x))(int,int ) */
/* 所以 *fun()为指针函数 */
/* 2.int (int a,int b) 是指针返回的函数原型 */
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
int (*fun())(int, int)
{return add;
}int (*fun_chose(int chose))(int, int)
{if (1 == chose){return subtract;}
}int main()
{int (*operation)(int, int);operation = fun();printf("相加:%d\n", operation(1, 2));operation = fun_chose(1);printf("相减:%d\n", operation(1, 2));
}
输出结果: 相加:3相减:-1
五、函数指针数组
#include<stdio.h>
#include<stdlib.h>
void fun1(const char *str)
{printf("fun1:%s", str);
}
void fun2(const char *str)
{printf("fun2:%s", str);
}
void fun3(const char *str)
{printf("fun3:%s", str);
}
int main()
{int i = 0;/*void(*pfun1)(const char *) = fun1;void(*pfun2)(const char *) = fun2;void(*pfun3)(const char *) = fun3;*/void(*function_ponit_array[3])(const char *) = { fun1, fun2, fun3 };for (i = 0; i < 3; i++){function_ponit_array[i]("hello world\n");}system("pause\n");return 0;
}
六、回调函数
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
// 定义回调函数类型
typedef void (*CallbackType)(int);
// 函数接受回调函数作为参数
void performOperation(int data, CallbackType callback) {// 执行操作printf("Performing operation with data: %d\n", data);// 调用回调函数callback(data);
}
// 实现一个回调函数
void callbackFunction(int result) {printf("Callback function called with result: %d\n", result);
}
int main(int argc, char *argv[]) {performOperation(42, callbackFunction);system("pause") ;return 0;
}
七、参考资料
【C语言】《回调函数》详细解析
c语言:数组指针,指针数组,函数指针,函数指针数组,指向函数指针数组的指针C语言-数组指针与指针数组
【C语言】 “函数指针”和“指针函数” 用法和详解(太细了!!!)菜鸟级教程
总结
本文仅仅简单介绍了【C语言】函数指针与指针函数,评论区欢迎讨论。