首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【进阶指针二】数组参&指针参&函数指针&函数指针数组&回调函数

【进阶指针一】字符指针&指针数组&数组指针 https://blog.csdn.net/qq_64428099/article/details/125011487 目录  1.数组参 1-2 二维数组参...  2 指针参 2-1 一级指针参 2-2 二级指针参 2-3 关于&arr和arr 3 函数指针 3-1 函数指针引入 3-2 函数指针脱裤子放屁使用【先见一见基本操作】 3-3 试图看懂大佬写代码... 4 函数指针数组 4-1函数指针数组引入和基本使用  4-2 函数指针数组妙用 ----  1.数组参 1-1一维数组参 正向:实参给定,猜猜看形参可以怎么写?...(整个一维数组地址 test2(&arr);//整个二维数组地址 return 0; } 这里以一维数组为例,讲一讲函数内要想打印具体实现(&arr鸡肋问题): 如果在主函数调用时候...,Sub,Mul,Div函数都是回调函数,通过不同函数地址给Cal函数,Cal函数内部用函数指针接收,从而实现了Cal函数多重功能。

87440
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    指针详解(二级指针指针数组数组指针、字符指针、二维数组参、函数指针变量)(二)

    :当你在写函数时,如果你想让函数操作一个数组,你可以数组指针作为函数参数传递。...1.写成数组更加直观,为了方便理解 2.写成指针参是因为数组参,传递数组第一个元素地址 二维数组参,形参写成数组也是可以,非常直观,容易理解 2、形参能写成指针吗?...*)[5],那就意味着二维数组参本质上也是传递了地址,传递第一行这个一位数组地址,那么形参可以写成数组指针形式 五、函数指针变量 函数指针变量创建 函数指针用来存放函数地址 1、回调函数...:在很多情况下,我们需要将一个函数作为参数传递给另一个函数。...这在实现诸如事件驱动系统、并行计算等高级功能时非常有用。在这些情况下,我们可以函数指针作为参数传递,以便在需要时调用这个函数

    36910

    C语言函数参:指针指针

    这是道哥第013篇原创 前言 今天同事问了一个问题:在函数参数中传递指针指针,很常用一个场景,重新梳理一下记录于此,以后如果有类似的问题直接发这篇小总结就可以了。...size个字节空间,然后返回给main函数pData指针。...到这里就已经看到程序崩溃原因了:虽然给指针p赋值了,但是实参pData中内容一直为空,因此从do_malloc函数返回之后,pData仍然是一个空指针,所以就崩溃了。...在do_malloc函数中,调用系统函数malloc成功之后返回所分配空间首地址,关键是要把这个首地址送给pData指针,也就是说要让pData指针变量中值等于这个堆空间首地址。...执行do_malloc(&pData, 128); 把pData指针地址作为实参进行传递,因为pData本身就是一个指针,加上取地址符&,就是指针指针(二级指针),因此do_malloc函数第一个参数就要定义成

    2.1K20

    函数指针定义方式,和指针函数区别,函数指针数组

    printf("%d+%d", a, b); } void test() { //函数指针定义三种方式 //1.先定义出函数类型,再通过函数类型定义指针变量 typedef void(FUNC_TYPE...//2.先定义出函数指针类型,再通过类型定义函数指针变量 typedef void(*FUNC_TYPE)(int, int); FUNC_TYPE func = fun1; func...以上三种方式:第三种使用率最高 函数指针指针函数区别 函数指针:指向函数指针—void(*p)(int,int)=fun1; 指针函数函数返回值是指针—int * fun1(int *a){return...a;} 函数指针数组-----》指针数组数组里面每个元素类型都是函数指针 #define _CRT_SECURE_NO_WARNINGS #include void fun1()..."fun1\n"); } void fun2() { printf("fun2\n"); } void fun3() { printf("fun3\n"); } void test() { //函数指针数组

    1.3K10

    函数参数值和指针有什么区别?

    为什么又有值,又有指针 看到这里,不知道你是否会疑惑,为什么给函数传递参数时候,一会是值,一会是指针呢?为什么指针就能改变参数值呢?实际上,C语言里,参数传递都是值传递!...也就是说,你认为指针也是值,只不过它值是指针类型罢了。 我们再通过图来理解前面为什么指针就可以交换a,b值: ?...从图中可以看出,虽然传递给函数是指向a和b指针副本,但是它副本同样也是指向a和b,因此虽然不能改变指针指向,但是能改变参数a和b指向内容,即改变原始a和b值。...我们还是利用前面所知来分析,由于传递给getMemory函数参数都是一个副本,因此函数p也是外部p一个副本,因此即便在函数内部,p指向了一块新申请内存,仍然不会改变外面p值,即p还是指向NULL...getMemory 总结 本文总结如下: 函数参数都是原数据“副本”,因此在函数内无法改变原数据 函数中参数都是值,指针本质上也是值 如果想要改变入参内容,则需要该入参地址(指针和引用都是类似的作用

    3K30

    指针详解(const、指针运算、数组理解、址调用和值调用、一维数组本质​)(一)

    这实际上是向数组中输入数据。 printf("%d ", *(p + i));使用printf函数输出指针p加上i所指向整数。这实际上是从数组中读取数据并输出。...3.arr[i]中[]是索引运算符,用于访问数组元素。它表示数组名arr解析为指向数组首元素指针,并使用索引i进行偏移,以访问数组中第i个元素值。...引子:我们之前都是在函数外部计算数组元素个数,把数组传给下一个函数后,函数内部可以求数组元素个数吗?...//test(arr);//这里数组名就是数组首元素地址 Print(arr,sz); return 0; } 六、址调用和值调用 值调用:是变量,值调用 int Add...值调用函数时,函数实参传给形参,形参是实参一份拷贝 形参有自己独立空间,对实参修改不会影响实参!!!

    18510

    【C 语言】二级指针作为输入 ( 指针数组 | 二级指针 作为函数输入 | 抽象函数业务逻辑 )

    文章目录 一、打印 指针数组指针指向字符串 二、字符串排序 三、代码示例 一、打印 指针数组指针指向字符串 ---- 打印 指针数组指针指向字符串 : 指针退化问题 : 传入二级指针..., 同时还要传入 一级指针个数 ; 实参是 指针数组 , 形参 退化为 二级指针 , 需要人为指定 数组元素个数 ; 验证指针合法性 : 函数中 , 只要是指针 , 就有可能为 NULL , 函数入口就要验证该指针合法性...[i]); printf("%s\n", *(array + i)); } return 0; } 二、字符串排序 ---- 指针数组 作为参数 , 传入函数中 ;...函数 二级指针 形参 , 既要作为 输入 , 又要作为输出 ; int sort_array(char **array, int num) { // 验证指针合法性 if(array...发现是 char , 说明指针指向数据是 char 类型 * * array 是一个数组 , 数组元素 char * 字符串 * * 这是 指针数组 ,

    58010

    函数指针数组概念和应用

    ,因为我们发现Add,Sub,Mul,Div这4个函数参数和返回类型都一样,又因为函数名就表示函数地址,所以我们把这4个函数地址存放在函数指针数组parr里面。...书写小技巧: 我们书写函数指针数组时,先写上函数指针形式,接着在名字后面加上数组 [ ] 方括号,就可以完成对函数指针数组形式书写。 有什么用? 我们来模拟实现一个计算器。...不难看出,用函数指针数组求解不仅仅减少很多代码量,也方便我们日后增加运算法则,直接在数组里面增加函数名即可。...指向函数指针数组指针 相当于我们取了函数指针数组地址进行存放,书写形式就是先写函数指针,接着再写函数指针数组,最后再写指向函数指针数组指针。...; } 小技巧: 指针把*和名字去掉,剩下就是指针指向对象 数组数组名和 [ ] 去掉,剩下就是存放在数组类型。

    7610

    指针数组做main函数形参

    指针数组 1.1 基本概念 指针数组是指一个数组,其中每个元素都是指针。 这意味着数组每个元素都存储一个地址,该地址指向内存中某个位置。...*intArray[3]; // 声明一个包含3个整型指针数组 // 指针指向整型变量 intArray[0] = &num1; intArray[1] = &num2;...指针数组做main形参 2.1 int main(int argc, char *argv[]); 指针数组一个重要应用是做main函数形参。...1. main函数原型通常定义为 int main(int argc, char *argv[]); 说明: 其中,argc 表示命令行参数数量,argv 是一个指针数组,每个元素都是一个指向以 null...如果main函数带参数的话,则第一个参数必须是int型,第二个参数必须是字符指针数组 char *xx[],参数只能由操作系统给出。

    10510

    【C 语言】结构体相关 函数 指针 数组

    结构体概述 : 结构体是 多个 变量集合, 变量类型可以不同; -- 可进行操作 : 结构体可以进行 拷贝 赋值操作, 可以作为 函数参数 和 函数返回值; 1....; -- 访问成员 : 使用 结构体变量名.成员变量名 可以访问成员变量; 函数传递结构体方法 :  -- 传递结构体成员 : 结构体拆开, 将其中成员变量分别传入; struct class create_class...->name 分析 : 获取 结构体中 name 字符串值(注意不是指针|地址); -- *p++->name 分析 : 先获取 name 字符串值, 再将p自增; 结构体函数示例 : /****...* 为数组初始化 * 直接每个结构体成员值依次列出即可 */ struct student { char *name; int age; } team1[] = { "Tom", 12...high 和 low : 其中 low 是首元素 首地址, high 是 尾元素尾地址, 只有这样 它们 0.5 倍才是准确中值首地址; 指针指向数组注意点 : 不要生成非法指针, 指针不能指向数组之外元素

    3K20

    PHP七个数组指针函数

    PHP七个数组指针函数 ---- 序号 函数 描述 1 reset() 一个数组内部指针重置到首位,并返回第一个元素值 2 end() 一个数组内部指针移动到数组最后一个元素所在位置,并返回最后一个元素值...3 prev() 移动数组指针到上一位,返回该位值,当该位没有元素或是空数组时返回false 4 next() 移动数组指针到下一位,返回该位值,当该位没有元素或是空数组时返回false 5 key...() 返回当前指针所指向元素键,当指针所指那一位没有元素返回null,空数组返回null 6 current() 返回当前数组指针所指向值,指针移动超出了数组末尾或数组为空时返回false 7...each() 返回当前指针所指元素值和键,并且移动指针到下一位,从PHP7.2.0开始,此函数已被弃用 2. each() 从 7.2.0 开始被弃用,不推荐再使用 ---- Warning This...数组指针函数参数必须是一个变量 ---- 因为上面的数组指针函数都是引用值,所以数组指针函数参数必须是一个变量,而不能直接传给一个数组数据 $arr = ['张三', '李四', '王五'];

    57430

    Shell编程中关于数组作为参数传递给函数若干问题解读

    结合python对于数组切片处理来设想,arr[*] 中*表示所有,即对数组arr进行所有元素切片,而最后结果其实是可以理解成数组“剥去了外壳”,如:1 2 3 4 5 6。...3、 数组作为参数传递给函数若干问题说明以下通过例子来说明数组遇到问题以及原因:第一、关于$1 问题[root@iZuf6gxtsgxni1r88kx9rtZ linux_cmd]# cat...2 数组用""包裹了起来,表示整个参数当成一个字符串,这样内部分隔符IFS无法对字符串内空格起作用了,达到了传递整个数组目的。...,而这里由于只向函数传递了1个参数并且该参数是数组,因此在这种特定情况下也可以取传递数组参数。...(echo ${myarray[*]}) 是数组写成n1 n2 n3 n4 n5 ...形式,如下:对函数参数 $arg2形式:[root@iZuf6gxtsgxni1r88kx9rtZ linux_cmd

    15210

    C 二维数组指针函数指针、typedef等一些笔记

    文章目录 二维函数指针 二维数组 二维数组名不能传递给二级指针 数组含义 指针作为函数入参 一维指针 改变一维指针指向值 改变一维指针指向地址 二维指针 函数指针 函数指针数组 typedef...10个元素数组,也称行指针 int* p[10]:一个数组数组内每个元素都是指针 二维数组名不能传递给二级指针 二维数组跟二级指针,没有直接关系。...指针作为函数入参 当需要在函数内部改变传入变量值,就需要这个变量地址,对指针变量也一样。 一维指针 改变一维指针指向值 当一维指针作为函数入参,且需要改变它值,需要外部定义好、分配好内存。...函数了ptr本身地址0x1进去,在函数内部将它0x1指向旧地址0x2指向了新地址如0x3。跳出函数后,ptr本身地址0x1没变,而它指向地址变成了0x3。...; // 函数标识符代表函数首地址 // 或 func = &add; 调用函数指针 (*func)(1,2) // 或 func(1,2) 函数指针数组 函数指针数组是一个其元素是函数指针数组

    59710

    寒假每日提升(1)

    2、数组参 关于数组问题,需要以下几点关注 1、函数形式要和函数实参个数相匹配 2、函数实参是数组,形参也可以写成数组 3、形参如果是以为数组数组大小可以省略不写 就例如这样子...已知数组D定义是 int D[4][8]; 现在需要把这个数组作为实参传递给一个函数进行处理。...由于B是指针数组,可以看之前文章,这里讲述了指针数组数组指针这就不再赘叙,很显然B是错。那C为什么是对呢?首先是因为是数组指针,对应是存放数组指针,并且数组还是8个元素。...相比如此,也差不多很明白知道了数组参,以及二维数组细节了 3、理解数组参细节,使用malloc创建二维数组 对于malloc来说,在官网定义是这样。...也就是void类型,所以在这样基础之上,我们可以理解上一部分数组指针,利用其特点,创造出二维数组,具体请看下面代码。

    9710
    领券