首页 > 其他分享 >c语言函数指针和指针函数的区别及代码示例

c语言函数指针和指针函数的区别及代码示例

时间:2024-07-02 21:58:16浏览次数:1  
标签:返回 函数 示例 int 类型 函数指针 指针

c语言函数指针和指针函数的区别及代码示例

在C或C++中,函数指针和指针函数是两个容易混淆但本质不同的概念。理解它们的区别对于深入掌握C/C++的指针和函数特性至关重要。

1. 函数指针

定义:函数指针是指向函数的指针。它存储了函数的地址,通过它可以调用该函数。

语法

返回类型 (*指针变量名)(参数类型列表);

示例

#include <stdio.h>  
  
void printHello() {  
    printf("Hello, World!\n");  
}  
  
int main() {  
    // 声明一个函数指针,指向没有参数、返回类型为void的函数  
    void (*funcPtr)();  
  
    // 将函数printHello的地址赋给函数指针  
    funcPtr = printHello;  
  
    // 通过函数指针调用函数  
    (*funcPtr)(); // 调用printHello  
  
    // 在C中,也可以省略解引用操作符,直接写 funcPtr();  
    funcPtr();  
  
    return 0;  
}

2. 指针函数

定义:指针函数是返回指针的函数。它和普通函数一样,有自己的参数和返回类型,只不过这个返回类型是某个类型的指针。

语法

返回类型* 函数名(参数类型列表);

注意:这里的关键是理解整个返回类型*作为函数的返回类型,而不是将返回类型*分开来看。

示例

#include <stdio.h>  
#include <stdlib.h>  
  
// 返回一个指向int的指针  
int* createArray(int size) {  
    // 分配一个整型数组  
    int* arr = (int*)malloc(size * sizeof(int));  
  
    // 初始化数组(这里简单处理,只设置第一个元素)  
    if (arr != NULL) {  
        arr[0] = 10;  
    }  
  
    return arr; // 返回指向数组的指针  
}  
  
int main() {  
    // 调用指针函数  
    int* ptr = createArray(5);  
  
    // 使用返回的指针  
    if (ptr != NULL) {  
        printf("%d\n", ptr[0]); // 输出 10  
        free(ptr); // 释放分配的内存  
    }  
  
    return 0;  
}

总结

  • 函数指针:指向函数的指针,用于调用函数。
  • 指针函数:返回指针的函数,返回的指针可以指向任何数据类型,包括数组、结构体等。

通过这两个概念,C/C++程序员可以实现更灵活、更强大的代码结构和数据处理方式。

标签:返回,函数,示例,int,类型,函数指针,指针
From: https://www.cnblogs.com/zkbklink/p/18280612

相关文章

  • 第5章_指针(重点)
    文章目录第5章_指针1、指针的理解与定义1.1变量的访问方式1.2内存地址与指针1.3指针变量的定义1.4指针的应用场景2、指针的运算2.1取址运算符:&2.2取值运算符:*2.3指针的常用运算2.3.1指针与整数值的加减运算2.3.2指针的自增、自减运算2.3.3同类指针相减运算2.3......
  • 两数之和 II - 输入有序数组-双指针
    题目描述:个人题解:        初始时两个指针分别指向第一个元素位置和最后一个元素的位置。每次计算两个指针指向的两个元素之和,并和目标值比较。如果两个元素之和等于目标值,则发现了唯一解。如果两个元素之和小于目标值,则将左侧指针右移一位。如果两个元素之和大于目......
  • 前端vue3项目dagre-d3基础配置项及流程图组件示例(包括安装依赖)
    目录引言d3是什么?dagre是什么?dagre-d3是什么?dagre-d3配置项流程图示例依赖安装组件示例总结引言因为很多文档都是英文,刚开始调研的时候比较费劲,文档里的配置像示例又比较分散,就自己整理了一下,附上测试时写的示例d3是什么?d3.js 是一个强大的JavaScript库,用于在......
  • dig 命令详解及使用示例
    一、背景知识CNAMECNAME是CanonicalName的缩写,它是DNS(域名系统)记录的一种类型。CNAME记录用于将一个域名映射(别名)到另一个域名。换句话说,当你访问一个设置了CNAME记录的域名时,你实际上被重定向到了另一个域名。例如,假设你有一个域名www.baidu.com,你想让用户通过examp......
  • 红队工具Finger 安装具体以步骤-示例centos
    1.gitclonehttps://github.com/EASY233/Finger.git如果没有yuminstallgit2.pip3install-rrequirements.txt找到finger所在的文件夹可以用find-name"Finger"进入文件中配置命令前提要安装pythonyuminstallpython-pip33.python3Finger.py-h......
  • C++定义函数指针,回调C#
    C++定义函数指针。typedefint(__stdcall*delegate_func)(inta,intb);暴露接口:int__stdcallCPPcallCSharp(delegate_funcfunc);方法实现:int__stdcallCPPcallCSharp(delegate_funcfunc){returnfunc(1,2);}头文件calculator.h#ifndefLIB_CALCULATOR_H#defin......
  • 纳米体育数据电竞数据接口:基础数据包接口文档API示例③
    纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口,无请求次数限制,可按需购买,接口稳定高效;覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。纳米数据API2.0版本包含http协议以及websocket协议,主要通过http获取数......
  • ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别
    ONNXRuntime简介ONNXRuntime是一个跨平台的推理和训练机器学习加速器。ONNX运行时推理可以实现更快的客户体验和更低的成本,支持来自深度学习框架(如PyTorch和TensorFlow/Keras)以及经典机器学习库(如scikit-learn、LightGBM、XGBoost等)的模型。ONNX运行时与不同的硬件、......
  • 040【GD32F470】 灰度传感器移植成功示例
    【1TB嵌入式学习资料免费领取:https://link3.cc/sgzy】2.40灰度传感器2.40.1模块来源2.40.2规格参数工作电压:3.3V-5V工作电流:<20mA输出格式:模拟信号输出控制接口:ADC管脚数量:3Pin(2.54mm间距排针)2.40.3移植过程我们的目标是在梁山派GD32F470上能够判断当前环境......
  • C++(函数指针)
    目录基本语法示例常见用途注意事项函数指针是指向函数的指针,它保存了函数的地址,可以通过它调用指向的函数。函数指针在C++中具有多种用途,例如回调函数、动态函数调用以及实现多态等。基本语法函数指针的声明语法如下:返回类型(*指针名)(参数列表);示例声明和定义一个函数......