数组指针与函数指针

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关注公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!


博主介绍:
CSDN优质创作者,CSDN实力新星,CSDN内容合伙人;
阿里云社区专家博主;
华为云社区云享专家;
51CTO社区入驻博主,掘金社区入驻博主,支付宝社区入驻博主,博客园博主。


【数组指针与函数指针】

  • 前言
  • 函数指针语法
  • 数组指针与指针数组


专栏:《精通C语言》


前言

数组指针和函数指针都是C语言比较难的知识点,尤其是函数指针,并且函数指针在开发中有着巨大的作用。

函数指针语法

定义一个函数指针,并通过函数指针间接调用函数:

int get_num(int a, int b)
{return a + b;
}int (*func)(int a, int b); //定义了一个函数指针func,它指向 返回值为int 参数为 int a, int b的函数func = &get_num; //函数指针指向函数func(1, 2); //通过函数指针调用函数

通过定义一个函数指针类型来定义一个函数指针:

typedef int (*func)(int a, int b); //定义了一个函数指针类型func func1 = &get_num; //使用函数指针类型func定义函数指针变量func1

定义一个函数类型,并使用函数类型来定义一个函数指针

typedef int (func)(int a, int b); //定义了一个函数类型
func* func1 = &get_num;func1(1, 1); //间接调用

函数指针约定了函数的返回值和函数参数,功能开发者只要根据这个约定实现功能函数,就可以通过以函数指针为参数的统一接口进行调用,来使用这个函数的功能,实现了功能开发与功能使用的解耦合。这就是函数指针的巨大作用:函数指针做函数参数
具体函数指针做函数参数的应用详解请看我的另一篇文章:
回调函数
另外函数指针的正向调用使用场景,比如通过把动态库加载到程序中,在动态库中查找到函数入口地址来调用函数。

数组指针与指针数组

数组指针是指向数组的指针;指针数组是指针的数组。

数组指针举例

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>void PrintArray_int(int* array, int len)
{if ((NULL == array) || (len < 0)){printf("err:(NULL == array) || (len < 0)\n");return;}for (int i = 0; i < len; i++){//两种方法访问数组元素//printf(" %d ", array[i]);printf(" %d ", *(array + i));}printf("\n");
}int main()
{//定义一个数组变量int num_array[10];// num_array + 1 移动 sizeof(int) 个字节int len = sizeof(num_array) / sizeof(num_array[0]);//memset(num_array, 0, sizeof(num_array) / sizeof(num_array[0])); //典型错误,只把十个字节的内存值为0memset(num_array, 0, sizeof(num_array)); //实际应该把40个字节置为0PrintArray_int(num_array, sizeof(num_array) / sizeof(num_array[0]));//定义一个数组类型typedef int(array1_t)[];typedef int(array2_t)[10];array1_t a1 = {1, 2, 3};array2_t a2;for (int i = 0; i < 10; i++){a2[i] = i;}PrintArray_int(a1, sizeof(a1) / sizeof(a1[0]));PrintArray_int(a2, 10);//定义一个数组指针int(*p_array)[10];// p_array + 1 移动 sizeof(int) * 10 个字节p_array = &num_array;for (int i = 0; i < 10; i++){(*p_array)[i] = i + 1;}PrintArray_int(*p_array, 10);//定义一个指向数组的指针类型(数组指针)typedef int(*p_array_t)[10];p_array_t p1 = &num_array;for (int i = 0; i < 10; i++){(*p1)[i] = i + 2; //先解引用,还原为一级指针(数组本身可以看为一级指针//数组指针是指向数组的指针,也就是指向一级指针的指针,即二级指针)}PrintArray_int((*p1), 10);//指针数组const char* p2[2] = { "aaa", "bbb" };//p2[0] 和 p2[1] 都是一个指针printf("%s\n", p2[0]);printf("%s\n", p2[1]);system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超参数优化的多功能贝叶斯优化包SMAC3

地址 关键词 Bayesian optimization, hyperparameter optimization, SMAC3 文章概述 本文介绍了SMAC3&#xff0c;一个用于超参数优化的多功能贝叶斯优化包。SMAC3使用随机森林作为代理模型&#xff0c;并结合了多样性的BO和强化策略&#xff0c;如积极竞赛和多样性方法…

Python编程技巧 – 异常处理

Python编程技巧 – 异常处理 Python Programming Skills – Exception Handling By JacksonML 每一个程序都未必是健壮的&#xff0c;有时候很脆弱。只有在人的理想思维状况下&#xff0c;返回的结果才是正确的&#xff0c;如意的。 1. 错误发生及异常输出 面对种种编写有疏…

PR剪辑视频做自媒体添加字幕快速方式(简单好用的pr视频字幕模板)

如何选择合适的字幕添加进短视频呢&#xff1f;首先要先确定增加的视频风格&#xff0c;简约、商务、科技感、炫酷&#xff1b;再确定用途&#xff0c;注释、标记、语音翻译、引用、介绍&#xff1b;最后在相应的模板中挑选几个尝试&#xff0c;悬着一个最切合主题的使用&#…

推荐的国外自动控制原理优秀教材:现代控制系统

推荐国外著名高等院校信息科学与技术优秀教材《现代控制系统》&#xff08;Modern Control Systems&#xff09;&#xff0c;全书930页。自动控制原理课程教程,控制系统基础教材,涵盖控制工程方法,大量例题详细演示设计流程,电子版教学PPT和教学辅导手册供师生使用。 现代控制…

23、文件上传漏洞——Web容器及IIS

文章目录 一、常见web容器1.1 名词解释1.2 什么是web容器 二、IIS简介2.1 什么是IIS2.2 什么是文件解析 三、IIS6.0 文件解析漏洞3.1 漏洞利用 一、常见web容器 1.1 名词解释 服务器&#xff1a;一种管理资源并为用户提供服务的计算机。 web服务器&#xff0c;即www服务器或h…

C语言三种循环输出9*9乘法表

解题思路&#xff1a; 1、外层循环控制1~9循环 2、内层控制循环的次数 比如&#xff1a; 1 * 1 1 循环一次 1 * 1 1 1 * 2 循环两次 依此类推 int i, j;printf("for 打印9*9乘法表\r\n");for(i 1; i <10; i) {for(j 1; j < i;j) {printf("%d * %d %d…

QT----自定义信号和槽

第二天 2.1自定义信号和槽 新建一个Qtclass 自定义信号&#xff1a;返回值是void &#xff0c;只需要声明&#xff0c;不需要实现&#xff0c;可以有参数&#xff0c;可以重载 自定义槽&#xff1a;返回值void &#xff0c;需要声明&#xff0c;也需要实现&#xff0c;可以有…

学习设计模式的一个好网址

常用设计模式有哪些&#xff1f; (refactoringguru.cn)https://refactoringguru.cn/design-patterns

如何处理3dmax渲染完成后阴影部分?

使用3dmax软件&#xff0c;对效果图进行渲染过程中&#xff0c;有不少小伙伴&#xff0c;在渲染完成后出现问题。 较为常见的3dmax渲染问题有3dmax渲染有阴影&#xff1f; 对于一些新手伙伴遇到这类问题&#xff0c;不知如何解决&#xff0c;就会苦恼3dmax渲染有阴影怎么办&am…

【实战oj题】——相同的树及二叉树的最大深度

前言&#xff1a;二叉树是我们数据结构中一个比较重要的内容&#xff0c;它的oj题自然也就很多类型&#xff0c;那么我们今天就来解决二叉树中的oj题——相同的树。 这个题我们就得分情况了&#xff0c;如果两个树的根节点都为空的话&#xff0c;那么两棵树就会相等&#xff0c…

西南科技大学C++程序设计实验十一(泛型程序设计与C++标准模板库)

一、实验目的 1. 掌握泛型程序设计概念; 2. 掌握vector、deque、list容器使用方法; 3.了解set、map容器使用方法。 二、实验任务 1.分析完善以下程序,理解vector容器使用方法: #include <iostream> __#include <vector>_______ //补充vector模板头文件 …

【开源】基于Vue.js的学生综合素质评价系统

文末获取源码&#xff0c;项目编号&#xff1a; S 086 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S086。} 文末获取源码&#xff0c;项目编号&#xff1a;S086。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能…

YB4052 充满电压可调SOT23有防反接功能的线性锂离子电池充电芯片

YB4052 充满电压可调SOT23有防反接功能的线性锂离子电池充电芯片 描述&#xff1a; YB4052是一款完整的单节钾高子申池采用恒定申流恒定申乐线件充电器。其S0T封装与较少的外部元件数目使得B4052成为便携式应用的理想洗择。YB4052可以话合SB申源和活配器电源工作。由于采用了…

深度解读 | 搭载谷歌最强大模型Gemini的Bard能否赶上ChatGPT

大家好&#xff0c;我是极智视界&#xff0c;欢迎关注我的公众号&#xff0c;获取我的更多前沿科技分享 昨天早上看到了相关的报道&#xff0c;谷歌昨天发布了 "号称最强的大模型" Gemini&#xff0c;还是熟悉的字眼、还是熟悉的配方。之前谷歌一直在 AIGC 的竞争相…

CentOS或RHEL安装code-server(vscode-web)

下载rpm安装包 网络下载或者下载到本地再上传到服务器&#xff0c;点击访问国内下载地址&#xff0c;不需要积分curl -fOL https://github.com/coder/code-server/releases/download/v4.19.1/code-server-4.19.1-amd64.rpm安装 rpm -i code-server-4.19.1-amd64.rpm关闭和禁用…

OpenCV-Python:随机数与随机颜色

目录 Python中随机数 OpenCV-Python随机数 随机颜色的生成 随机噪声生成 代码练习与测试 知识笔记 Python中随机数 在Python中&#xff0c;我们可以使用random模块来生成随机数。random模块提供了一系列的函数来生成不同类型的随机数。以下是一些常用的随机数生成函数&…

案例精选|聚铭网络助力莱阳市人民医院打造合规性网络安全保障体系

莱阳市人民医院是一所集医疗、教学、科研、急救、康复、医养结合于一体的大型二级甲等综合性公立医院&#xff0c;占地总面积约3万平方米&#xff0c;建筑面积约7万平方米&#xff0c;设置科室48个&#xff0c;开放床位500张。医院先后获得山东省首批医养结合典型、山东省卒中防…

2024年江苏省职业院校技能大赛信息安全管理与评估 第二阶段学生组(样卷)

2024年江苏省职业院校技能大赛信息安全管理与评估 第二阶段学生组&#xff08;样卷&#xff09; 竞赛项目赛题 本文件为信息安全管理与评估项目竞赛-第二阶段样题&#xff0c;内容包括&#xff1a;网络安全事件响应、数字取证调查、应用程序安全。 本次比赛时间为180分钟。 …

MySQL数据库从小白到入门(二)

多表关系&#xff1a; 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构。由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种。 外键&#xff1a; 创…

批量AI人工智能写作软件下载【2024最新】

在当今数字化的浪潮中&#xff0c;人工智能技术为各行各业带来了颠覆性的变革。其中&#xff0c;AI在文案创作领域的应用尤为引人瞩目&#xff0c;而批量AI人工智能写作更是成为文案创作者们关注的热点。本文将深入探讨批量AI人工智能写作的概念、其在不同领域的应用&#xff0…