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

<指针进阶>指针数组和数组指针傻傻分不清?

在这里插入图片描述

✨Blog:🥰不会敲代码的小张:)🥰
🉑推荐专栏:C语言🤪、Cpp😶‍🌫️、数据结构初阶💀
💽座右铭:“記住,每一天都是一個新的開始😁😁😁
💀本章内容:《C语言指针进阶》的介绍✨

前章

参考前章指针内容->初级指针入口<-

  • 前章内容:
  • 1.指针是什么
  • 2.指针和指针类型
  • 2.1指针的解引用
  • 3.野指针
  • 4.指针运算
  • 5.指针和数组
  • 6.二级指针
  • 7.指针数组

目录

  • 前章
  • 指针数组
  • 数组指针
  • ---------------------------------------------------
  • 指针数组:是一个数组,数组的元素都是指针
  • 数组指针:是一个指针,它指向一个数组
  • ---------------------------------------------------
  • 函数指针
  • 函数指针数组
  • 指向函数指针数组的指针
  • 回调函数

指针数组

arr是一个数组,有5个元素,每个元素的类型是int*

int main()
{int a = 10;int b = 20;int c = 30;int d = 40;int e = 50;int* arr[5] = { &a, &b, &c, &d, &e };//整形指针的数组return 0;
}

数组指针

能够指向数组的指针

int main()
{int arr[5] = { 0,1,2,3,4 };//int的数组int(*parr)[5] = &arr;//指向arr数组的指针数组,记得要取地址for (int i = 0; i < 5; ++i){printf("%d ", arr[*(*parr) + i]);}return 0;
}

---------------------------------------------------

指针数组:是一个数组,数组的元素都是指针

数组指针:是一个指针,它指向一个数组

---------------------------------------------------

函数指针

函数指针是指向函数的指针变量。因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

其通用表达式为:返回类型 (*名称) (参数)

int Add(int x, int y)
{return x + y;
}int main()
{int (*pfuc)(int, int) = &Add;//函数指针的定义//int n = Add(100, 200);//正常调用函数int n = (*pfuc)(100, 200);//使用函数指针调用printf("%d\n", n);return 0;
}

函数指针数组

parr 先和 [] 结合,说明 parr是数组,数组的内容是什么呢?是 int (*)() 类型的函数指针
把函数的地址存到一个数组中,那这个数组就叫函数指针数组

int (*parr[10])();

指向函数指针数组的指针

指向函数指针数组的指针是一个 指针 ,指针指向一个 数组 ,数组的元素都是 函数指针

//一个指向有5个元素  每个元素是指向一个返回值为void函数的数组的指针
void (*(*p)[5])(const char*);

回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应
在这里插入图片描述

void Callback_1(int x)   ///回调函数
{printf("Hello, this is Callback_1: x = %d ", x);
}
void Fuc(int x, void (*Callback)(int)) // 函数指针定义作为参数
{Callback(x);//通过函数指针调用Callback_1
}
int main()
{Fuc(4, Callback_1);return 0;
}
http://www.lryc.cn/news/133538.html

相关文章:

  • 无代码集成飞书连接更多应用
  • 三分钟解决AE缓存预览渲染错误、暂停、卡顿问题
  • 朴实无华的数据增强然后训练一下应用在电网异物检测领域,好像有自己的数据集就能发文了
  • 【使用教程】在Ubuntu下运行CANopen通信PMM伺服电机使用教程(NimServoSDK_V2.0.0)
  • vue3+ts+vite项目页面初始化loading加载效果
  • ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步
  • 神经网络基础-神经网络补充概念-18-多个样本的向量化
  • *看门狗1
  • nginx防盗链
  • 8月16日上课内容 第二章 部署LVS-DR群集
  • ViT模型架构和CNN区别
  • 发布python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api,以及安卓接入案例代码
  • adb command
  • 在ARM服务器上一键安装Proxmox VE(以在Oracle Cloud VPS上为例)(甲骨文)
  • KMP算法(JS)
  • 恢复NuGet包_解决:System.BadImageFormatException:无法加载文件或程序集
  • Django学习笔记(2)
  • 高德地图开发者平台Python应用实践:快速入门周边商业环境信息查询
  • 【ES6】—let 声明方式
  • 【数据分析入门】Jupyter Notebook
  • 反射知识总结
  • MongoDB 安装 linux
  • 什么是KNN( K近邻算法)
  • Linux查看命令总结
  • npm报错 Cannot find module ‘@vuepress\core\node_m
  • mybatis入门环境搭建及CRUD
  • 小程序变化历史记录
  • jstack(Stack Trace for Java)Java堆栈跟踪工具
  • linux面试题整理
  • Linux笔记