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

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
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LeetCode 复制带随机指针的链表(C语言)

    新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。...那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。 返回复制链表的头节点。 用一个由 n 个节点组成的链表来表示输入/输出中的链表。...每个节点用一个[val,random_index] 表示: val:一个表示 Node.val 的整数。...代码实现 Definition for a Node. struct Node { int val; struct Node *next; struct Node *random...,p1是原链表中下一个结点的指针 cur=head;//cur是遍历原链表用的 while(cur)//遍历原结点 { p1=cur->next;

    76200

    c语言函数指针的用法_函数指针作为形参

    文章目录 导引 指针函数 指针函数定义 指针函数的三种写法 代码示例 函数指针 定义 代码示例 函数指针和指针函数区别 定义不同 写法不同 用法不同 导引 函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼...,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,...然后好不容易死记硬背下来应付考试或者面试,然后过了几天发现,又是根本不会用,也不知道该在哪些地方用,这就尴尬了。...当然,也要看个人习惯,如果理解其定义,随便怎么用都行啦。...再简单一点,可以这样辨别两者:函数名带括号的就是函数指针,否则就是指针函数。

    65820

    【C语言笔记】函数指针作为函数的参数

    函数指针有两种常用的用法,一种是作为结构体成员,关于函数指针作为结构体成员的用法可移步至上一篇【C语言笔记】函数指针作为结构体成员进行查看。另一种是函数指针作为函数的参数。...先假设有这样一种情况:我们要编写一个库,它提供了某些排序算法的实现(如冒泡排序、快速排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;或者,能让库可用于多种数据类型(...void *)) 这是在C通用工具库中声明的一个快速排序算法函数,其可以用来排序int类型、float类型以及字符串数据,可以按从小到大的顺序也可以按从大到小的顺序排序。...其关键在于函数指针comp指向的函数的具体实现。 二、举例说明 上一节我们使用函数指针作为结构体成员来实现四则运算,这里一节我们稍微修改一下代码,使用函数指针作为函数参数来实现四则运算。...关于typedef与define的区别可查看往期笔记:【C语言笔记】#define与typedef的区别?

    10.7K12

    C进阶:指针(2),qsort函数,模拟实现冒泡算法

    一.回调函数 要想理解回调函数,就要先知道什么是函数指针,函数指针详见:http://t.csdn.cn/oYiuC 1.回调函数的定义 函数指针作为某个函数的参数 函数指针变量可以作为某个函数的参数来使用的...简单讲:回调函数是由别人的函数执行时调用你实现的函数。...: 三.模拟实现冒泡算法 1.什么是冒泡排序 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。...,它只能排整型数据,那我们可不可以写一个类似于冒泡排序算法的函数来实现可以排序任何数据呢?...这就需要利用到回调函数了 2.模拟实现冒泡算法 通过上文我们知道,qsort 是一个可以快速排序的库函数,它使用起来很方便,那么我们就可以模仿 qsort 函数的定义来实现 一个可以排任何数据的冒泡函数

    12110

    c语言函数指针的理解与使用

    C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型。...B) 也很简单,与C)表达式相比,唯一不同的就是函数的返回值类型为char**,是个二级指针。 A) fun1是函数名吗?回忆一下前面讲解数组指针时的情形。...通过用(*pf)取出存在这个地址上的函数,然后调用它。   这里需要注意到是,在Visual C++6.0里,给函数指针赋值时,可以用&fun或直接用函数名fun。...使用函数指针的好处在于,可以将实现同一功能的多个模块统一起来标识,这样一来更容易后期的维护,系统结构更加清晰。或者归纳为:便于分层设计、利于系统抽象、降低耦合度以及使接口与实现分开。 4....指针专题一 C语言 指针专题二 C语言 函数1 C语言 函数2 C语言指针核心16讲 指针专题一 C语言指针核心16讲 指针专题二

    1.1K30

    c语言函数指针的理解与使用

    C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型。...B) 也很简单,与C)表达式相比,唯一不同的就是函数的返回值类型为char**,是个二级指针。 A) fun1是函数名吗?回忆一下前面讲解数组指针时的情形。...通过用(*pf)取出存在这个地址上的函数,然后调用它。   这里需要注意到是,在Visual C++6.0里,给函数指针赋值时,可以用&fun或直接用函数名fun。...使用函数指针的好处在于,可以将实现同一功能的多个模块统一起来标识,这样一来更容易后期的维护,系统结构更加清晰。或者归纳为:便于分层设计、利于系统抽象、降低耦合度以及使接口与实现分开。 4....指针专题一 C语言 指针专题二 C语言 函数1 C语言 函数2 C语言指针核心16讲 指针专题一 C语言指针核心16讲 指针专题二

    65410

    C语言中的函数指针(*(void(*)())0)();

    ‘’ 我刚开始学习C语言的时候是写简单的数学运算在黑框框里面跑,然后用C语言写51单片机的代码,再到后来玩stm32,学应用层编程,学内核编程等,框架结构逐渐变的复杂,也越来越觉得对C语言的理解还不够到位...个人总结一下C语言中有关函数的知识,如有问题请留言指明*v* (*(void(*)())0)(); 其实这个语句只有在微处理器最底层才有可能被调用,因为应用层几乎没有直接对一个地址进行操作的。...什么是函数指针变量? 怎么通过函数指针变量调用函数? 函数指针变量是怎么定义的? 第一个问题:我们知道一个函数形式是 type func(type...)...func就是一个函数的指针,我们假设一个指针变量funcp = &func; 那么funcp就是一个函数指针变量。 第二个问题:正常的函数调用直接使用func(...);就可以了。...C语言的函数指针非常重要,大工程里面经常出现各种回调函数,学习的过程中,基本功还是要扎实,不然真的会经常踏入陷阱。 ps:本文参考资料《C陷阱与缺陷》,感兴趣的同学可以读一读

    1.8K20

    一看就会的C语言笔记——指针函数、函数指针、回调函数

    //指针函数:指针函数本质是一个函数,只不过返回值为某一类型的指针(地址值)。 //函数返回值必须用同类型的变量来接受,也就是说,指针函数的返回值必须赋值给同类型的指针变量。...而这个存储着函数地址的指针就是函数指针。 //换言之,我们所说的指针变量通畅指向一个整形、字符型、或者数组等变量,而函数指针指向的是函数。...//函数指针定义格式:类型名 (*函数名)(函数参数列表) //我们可以发现,这里的"*函数名"是用括号括起来的 // //回调函数:函数指针作为某个函数的参数 //我们知道,函数指针变量也是一个变量,...如果规则有变,只需要对应的员工知道哪里改变了,而经理不需要关注这些细节。 //以上就是回调函数 小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:870963251!..."请输入三个数字:"); scanf("%d %d %d", & a, & b, & c); /* 与直接调用函数等价,d = max(max(a, b), c) */ d = p(p(a, b), c

    2.5K00

    C语言 | 用指向指针的指针对n个整数排序

    例82:C语言用指向指针的指针的方法对n个整数排序并输出;要求将排序单独写成一个函数;n个整数在主函数中输入,最后在主函数中输出。...解题思路:读者看着道题的时候,首先要观察一下有什么规律,然后指向指针的指针在上一道练习题中已经有了铺垫,读者可以联系上一道题去熟练使用指向指针的指针。...C语言源代码演示: #include//头文件  int main()//主函数  {   void sort(int **point,int number); //sort排序函数声明...,&number);//键盘输入    for(i=0;i<number;i++)   {     pstr[i]=&data[i]; //将第i个整数的地址赋予指针数组pstr的第i个元素    }...以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C语言学习路线     C语言开发工具 更多案例可以go公众号:C语言入门到精通

    1.5K22

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

    结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行的操作 : 结构体可以进行 拷贝 赋值操作, 可以作为 函数参数 和 函数返回值; 1....结构标记 声明变量; -- 定义结构体时声明变量 : 这种声明变量的方式可以不用 结构标记, 变量名写在 花括号 后面, 用头号隔开; struct student { char *name;...class c1 = {s2, s3}; return c1; } -- 传递结构体指针 : 传递结构体的指针, 访问形式如下; /* * 传入一个结构体指针 * 通过指针访问结构体的方法 :...->name 分析 : 获取 结构体中的 name 字符串的值(注意不是指针|地址); -- *p++->name 分析 : 先获取 name 字符串的值, 再将p自增; 结构体函数示例 : /****...指向结构体指针 (1) 使用指针方式实现上面的关键字统计程序 使用指针进行二分查找 :  -- 使用下标找中值 : 在之前找中值时通过 mid = (low + high)方法, 这样做可行是因为 low

    3K20

    C语言中函数指针和回调函数的详解

    这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。...pfun ,这个函数指针的返回值为void型,然后我们给函数指针赋值,赋值为myfun,也就是myfun函数的首地址,在C99中myfun函数名就是myfun函数的首地址,此时pfun获得了myfun的地址...,pfun的地址等于myfun的地址,所以最终调用pfun();也就相当于调用了myfun(); 第二种用法:typedef 原变量类型 别名 也可以用typedef来定义一个指针函数这样使在大型代码中更加简洁...p = myfun可以理解为将函数指针p指向myfun函数的地址,p(100);相当于执行myfun(100); 第三种用结构体函数指针的方法 #include #include...先假设有这样一种情况:我们要编写一个库,它提供了某些排序算法的实现(如冒泡排序、快速排序、shell排序、shake排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;

    85110

    【指针进阶三】实现C语言快排函数qsort&回调函数

    经典快速排序算法-Quick_sort 先来手动实现一下Quick_sort 排序函数 #include void Swap(int* a, int* b) { int temp...1. qsort排序函数的基本介绍 qsort排序函数是C语言标准库里的函数,实现原理是快速排序算法,函数原型如下:  qsort函数的相关参数的介绍和意义: 头文件: #include...: 可以接收任何类型的指针 不能直接加减整数,使用前需要强转  因为cmp比较函数需要使用者自行设计,所以对于不同的使用者在qsort函数里传给cmp函数的参数类型可能是任何类型的指针,所以在cmp...比较函数内得用void*类型的指针来接收,使用时只需将void* 类型的指针做出相应的强转即可。...elem1==elem2 返回值<0             elem1<elem2  2. qsort函数的具体实现 学习qsort函数的具体实现,你将学到这个C语言库函数另一个绝妙的地方。

    49630
    领券