当前位置: 首页 > article >正文

【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数

【C语言】函数指针与指针函数


文章目录

    • @[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语言】函数指针与指针函数,评论区欢迎讨论。


http://www.kler.cn/a/450218.html

相关文章:

  • ECharts散点图-气泡图,附视频讲解与代码下载
  • 高强度螺栓等级划分
  • hCaptcha 图像识别 API 对接说明
  • 项目亮点案例
  • Day50 图论part01
  • STM32, GD32 cubemx CAN 低速率125kbps 报文丢失,解决了
  • vscode 识别git目录
  • 探索大语言模型的世界:入门指南
  • vue中proxy代理配置(测试一)
  • 【HarmonyOS之旅】HarmonyOS开发基础知识(二)
  • Spring源码分析之ConfigurationClassPostProcessor
  • Android10 rk3399 以太网接入流程分析
  • Pyqt6的tableWidget填充数据
  • 《Python 解释器和 PyCharm 详解》
  • 不写一行代码,通义灵码 5 分钟“手撕”年会抽奖程序
  • 新纪天工 开物焕彩:重大科技成就发布会参会感
  • 【Ubuntu 20.04】notepad++的安装与汉化
  • Pytorch | 利用FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
  • 【汇编语言】端口 —— 「从端口到时间:一文了解CMOS RAM与汇编指令的交汇」
  • 一文解释清楚OpenHarmony面向全场景的分布式操作系统
  • Java重要面试名词整理(一):MySQLJVMTomcat
  • RunCam WiFiLink连接手机图传测试
  • 深度剖析CRM系统:什么是CRM系统?有什么用?企业该如何选择?
  • 【读书笔记】《论语别裁》爱与罪
  • (补)算法刷题Day25:BM62 斐波那契数列
  • Python结合一些常见的自然语言处理库来实现根据提示生成作文