首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏编程学习之路

    指针4

    当我们使用qsort进行排列时,其qsort函数内部是通过快速排序来实现排列(我们并没学快速排列,其涉及的知识对我来说超纲) 对于其参数四个类型中,唯独最后的函数指针接受其相同类型函数的函数名:所以其接收的函数需要自定义 这里再说一点自定义函数类型必须类型为 int(const void*,const void*),因为qsort要求的函数指针类型为int (*)(const void*,const void*),所以类型必须都为这种 结构体排列的自定义函数 结构体进行排列,并不能里面的数据全部同时进行排列,只能选结构体里面的一种数据进行排列 (这个道理显而易见) 其中我们用到了结构体操作访问符,之前也介绍过->左边为结构体指针 > time (在猜数字游戏中出现) 头文件为#include<time.h> assert库函数所用的头文件#include<assert.h> 这就是目前已学的所有库函数 总结 这就是指针4) 的内容,内容有点少,其中的重点是qsort函数。

    27410编辑于 2024-04-08
  • C语言——指针4

    = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } } int main() { int arr[] = { 2,3,5,4,1 结构体变量.成员名 -> 结构体指针->成员名 int main() { struct stu s = { "zhangsan",20 }; printf("%s %d\n", s.name, s.age); struct stu * ps=&s; // 结构体指针 printf("%s %d\n", (*ps).name, (*ps).age); printf("%s %d\n", #inculde <stdio.h> int main() { int a = 10; printf("%d\n", sizeof(a)); //4 printf("%d\n", sizeof a); //4 printf("%d\n", sizeof(int));//4 return 0; } 4.2 strlen strlen 是C语言库函数,功能是求字符串长度。

    22010编辑于 2025-10-13
  • 来自专栏技术分享

    指针(4)---转移表

    在C语言中,转移表是一个指针数组,通常的作用是用来提高代码的可读性和维护性,也就是使得代码更加“好看”。 例如: 现在要求写一个关于计算器的代码用于基本的四则运算。 , int b) { return a * b; } int div(int a, int b) { return a / b; } //主函数实现计算器,并假设输入1为加法,2为减法,3为乘法,4为除法 printf("输⼊两个数:"); scanf("%d %d", &x, &y); ret = mul(x, y); printf("ret = %d\n", ret); break; case 4: 我们可以使用一个函数指针数组(也就是一个转移表)来优化它。 input])(x, y); printf( "ret = %d\n", ret); } 首先从长度上我们发现明显短了不少;其次我们可以注意到原先向纵向延伸的一系列选择(加减乘除)变为了横向延伸,函数指针数组可以使得函数在数组内元素变化的情况下直接被使用

    1K10编辑于 2024-06-18
  • 来自专栏C语言

    深⼊理解指针(4)

    这⾥str3和str4指向的是⼀个同⼀个常量字符串。C/C++会把常量字符串存储到单独的⼀个内存区域,当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。 所以str1和str2不同,str3和str4相同。 二 数组指针变量 1定义: •整形指针变量: int * pint; 存放的是整形变量的地址,能够指向整形数据的指针。 | pf3 指向函数的参数类型和个数的交代 | 函数指针变量名 pf3 指向函数的返回类型 4 函数指针变量的使⽤(函数调用) 4 typedef *********\n"); printf("***** 1.add 2.sub ******\n"); printf("***** 3.mul 4.div **** 0; if(input == 0) printf("退出计算器\n"); else if (input >= 1 && input <= 4)

    15510编辑于 2025-12-30
  • 来自专栏编程学习之路

    指针4)的题目

    第一题(实现转移表) 该题让我们用转移表去实现计算机的功能,代码如上,用到了转移表(一种函数指针数组)。较为简单代码。  第二题(利用qsort函数) 这里升序降序给出例子作对比。 strcmp和strlen内部参数加const修饰依然一样,指针4)里有讲这很特殊的地方,为什么两个都可以接收。

    17310编辑于 2024-04-08
  • 来自专栏C++

    C语言(指针4

    按道理说数组名是数组首元素的地址,那 sizeof(arr)求出来应该是4个字节的大小,这里为什么是40个字节的大小呢? 我们在之前的文章中说过,指针的类型决定了指针的差异、决定了在对指针进行解引用时的权限、指针 +- 整数的结果取决于指针的类型等。 可以看到,对数组首元素的地址+1增大了4个字节,对整个数组的地址+1增大了40个字节(其中地址是16进制表示),这一点相信看过我之前文章的小伙伴都已经非常清楚了,就不再赘述了。 ; (4)在自定义函数中使用数组内元素个数这个值需要在函数调用的时候作为函数参数传过去。 4.冒泡排序 学了上面的内容,我们就可以用数组和指针的知识来实现一下冒泡排序。我们这里写升序。

    37110编辑于 2024-10-16
  • 深入理解指针4

    数组和指针解析 一维数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a[] = { 1,2,3,4 } 因为a表示的是首元素的“地址”,对地址加减编译器会隐式转化为指针运算,只有指针才能对地址进行操作,所以类型是int*,大小是4或8个字节 sizeof(*a)是首元素地址,还是回到之前的内容,只有sizeof printf("%d\n", sizeof(&p[0]+1)); return 0; } sizeof(p):p是一个指针变量,求指针变量的大小4或8 sizeof(p+1):p同样是指向首元素' a',而p+1就是指向'b'的指针变量,大小4或8 sizeof(*p):对p指针进行解引用指向首元素'a',大小就是1个字节 sizeof(p[0]):是取出首元素,大小就是1个字节 sizeof(& p):取出的是p的地址 sizeof(&p+1):对取出p的地址加1,大小还是指针变量 sizeof(&p[0]+1):取出首元素的地址往后加1后就是第二个元素的地址,大小为4或8个字节 #define

    19410编辑于 2026-01-23
  • 深入理解指针4

    1.函数指针数组 在学习函数指针数组之前,我们先类比一下: 整型数组:存放整型的数组; 字符数组:存放字符的数组: 指针数值:存放地址的数组...... 那函数指针数组:存放函数指针的数组? 答案是:对的 函数指针数组是指针数组中的一种,这种数组中存放的函数指针(函数的地址),并且存放在函数指针数组中的元素类型要相同。 接下来我们看看具体做法: 由于函数指针数组中存放的是函数的地址,所以我们需要创建一个指针变量: int (* parr[ 4])(int,int )={ Add,Sub,Mul,Div }; parr 为函数指针数组的名字,int (*)(int,int)为数组元素类型,parr[4]中的4表示数组中由4个元素。 使用函数指针数组,我们可以通过数组下标找到函数。

    21010编辑于 2025-12-30
  • 来自专栏C++初阶高阶

    C语言初阶-----指针4

    10.数组指针变量 10.1 数组指针变量是什么? 我们学习了指针数组,指针数组是一种数组,数组中存放的是地址(指针)。 数组指针变量是,指针变量。存放的是数组的地址,能够指向数组的指针变量。 },{2,3,4,5,6},{3,4,5,6,7} }; Print(arr, 3, 5); return 0; } 12.函数指针变量  12.1 函数指针变量的创建 函数指针变量应该是用来存放函数地址的 &Add和Add指向的都是同样的地址 int c = Add(2, 3);//函数名调用 printf("%d\n", c); //5 int d = (*pf)(3, 4);//函数指针调用 ,这里的(* ) 可以不加,也可以加很多个* printf("%d\n", d); //7 int f = pf(4, 5); //函数指针调用 printf("%d\n", f); //9 int (*pfarr[4])(int, int) = { Add,Sub,Mul,Div };//pfarr是函数指针数组 int i = 0; for (i = 0; i < 4; i++

    20510编辑于 2025-10-22
  • 来自专栏Initial programming

    初识C语言·指针4

    1 回调函数 回调函数是通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数 时,被调用的函数就是回调函数。 ret); return 0; } int main() { int input = 0; printf("**1 Add 2 Sub*****\n"); printf("**3 Mul 4 { case 1: Fun(Add); break; case 2: Fun(Sub); break; case 3: Fun(Mul); break; case 4: main函数的基本框架写好之后,我们调用Fun函数,传的是函数名,因为函数名就是地址,所以你传函数名可以,&函数名也可以,毕竟都是地址,传过去之后用函数指针接收,注意函数指针的基本格式不能错。 int main() { int arr[10] = { 1,5,6,2,9,8,7,0,3,4 }; bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof

    27910编辑于 2024-10-16
  • 来自专栏学习

    C语言---深入指针4

    回调函数 //回调函数就是通过函数指针调用的函数 //这个在之前的转移表-计算器里面很明显,通过函数指针数组内的函数指针进行函数的调用 // // // 将这四段代码分装成一个函数,一个代码将这4个问题都解决 ****\n"); printf("********** 1.add 2.sub***********\n"); printf("********* 3.mull 4. break; case 3: Calc(Mull); break; case 4: ) // { // printf("%d ", arr[i]); // } //} //int main() //{ // int arr[] = { 3,1,7,9,4,2,6,8,0 < sz; i++) { printf("%d ", arr[i]); } } void test1() { int arr[] = { 3,1,7,9,4,2,6,8,0

    29510编辑于 2024-09-23
  • 来自专栏Initial programming

    初识算法 · 双指针(4)

    前言: 本文是双指针算法的最后一文,以复写零和四数之和作为结束,介绍方式同样是题目解析,算法原理,算法编写三部曲,以下是题目的链接: 1089. 复写零 - 力扣(LeetCode) 18. 4Sum - 力扣(LeetCode) 那么话不多说,直接进入主题。 显然,这道题并不是通过n个循环就可以解决的,所以我们不妨直接使用双指针。 到这个阶段,不妨不用思考为什么使用双指针,因为目前来说算法基础并不牢靠,我们不妨积累经验。 四数之和 题目解析 题目的意思和三数之和十分像的,三数之和是找三个数等于0,那么该题目是找4个数字等于target,并且下标不能重复,也就是一个数字不能一直使用,题目的要求很简单,所以我们直接进入算法原理部分 双指针算法也就到这里啦,后面的是滑动窗口~ 感谢阅读!

    23910编辑于 2024-10-16
  • 来自专栏学习

    学习——理解指针4)(指针学习最后一节)

    "%d\n", sizeof(arr1)); printf("%d\n", sizeof(arr2)); return 0; }         <3>sizeof与strlen的对比 二、数组和指针试题解析 <1>一维数组 //一维数组 void main() { int a[] = { 1,2,3,4 }; printf("%d\n", sizeof(a)); // 4*4--16 4 //*a <==> *&a[0] <==> a[0] 整型大小 4 个字节 printf("%d\n", sizeof(a + 1)); // 4/8 //a--数组名, printf("%u\n", sizeof(a[3])); //16 //a[3]是二维数组第三行这个一维数组的数组名,sizeof(数组名)求数组占空间的大小 return 0; } 三、指针运算试题 p被强制类型转换为无符号长整型指针,p+1跳过4个字节,Ox100000+4=Ox100000+0x4=Ox100004 return 0; } //题3 int main() { int a[3

    24110编辑于 2024-10-17
  • 指针篇(4)- 字符指针(剑指offer笔试题),数组指针,函数指针,函数指针数组、转移表

    这里str3和str4指向的是同一个常量字符串。 , 2,3,4,5,6, 3,4,5,6,7 }; test(arr,3,5); return 0; } 总结:二维数组传参,形参的部分可以写成数组,也可以写成指针形式。 当这里想一次性定义多个指针变量的时候,这里p1是指针,p2就不是指针了,*是给p1用的,p2就变成了int类型 但如果用typedef重新定义了pint,由pint创建的p3,p4类型是一样的, int (*p2)(int, int) = ⋐//p是函数指针变量 //&Sub, & Mul, & Div //函数指针数组 - 存放函数指针的数组 int (*pArr[4])(int 总结 以上就是指针4的全部内容了,也是期末周写的,差不多写了一周吧。喜欢的兄弟不要忘记一键三连给予支持哦,你们的支持就是我最大的动力!

    18610编辑于 2025-12-30
  • C语言的灵魂——指针(4)

    "; const char *str4 = "hello bit. { printf("str3 and str4 are same\n"); } else { printf("str3 and str4 are not same\n"); } 但str3与str4是一样的这是为什么呢?其实上面也说过了就是两个字符指针指向或存放了相同的字符串,同一字符串首地址是相同的所以str3自然与str4是一样的喽。 col;j++) { printf("%d ",arr[i][j]); } printf("\n"); } } int main() { int arr[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 p+i)+j)); //printf("%d ",arr[i][j]); } printf("\n"); } } int main() { int arr[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7

    22610编辑于 2025-12-23
  • 来自专栏汇编语言

    C语言之指针详解(4

    一、回调函数 首先我们先来了解一下什么是回调函数 回调函数通俗来讲就是一个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。 ,函数指针指向什么函数就调用什么函数,这里其实使用的就是回调函数的功能。 使用这个函数需要传入四个参数: 需要排序的数组的第一个元素的指针 数组的长度 每个元素的字节大小 比较两个元素的函数的指针 下面是两个用qsort函数进行排序的例子。 第四个参数是一个函数的指针,这个指向的函数是用来比较数组元素之间的大小的。

    26110编辑于 2024-10-21
  • 来自专栏UE4技术专场

    UE4智能指针

    #UE4智能指针分析 什么是智能指针 对裸指针进行封装,行为类似裸指针,但是却能够自主管理资源的释放的指针,其实说白了就是通过类的析构和对象的生命周期来管理资源的释放 使用智能指针 为什么使用智能指针 ,有一个指针指向控制块 和shared_ptr相当 为什么使用UE4的智能指针而不是用c11的(两个做具体的对比) 所有编译器和平台上有更加一致的实现 可以和虚幻本身的类型更好的结合,比如容器等 ,只能转移,不能复制 默认和裸指针相同,有状态的删除其和采用函数指针实现的删除器会增加尺寸 基本裸指针相同 TSharedPtr 引用计数的非侵入式的权威智能指针 默认是裸指针两倍,但是多出了控制块的内存 TWeakPtr - 弱指针 --- 使用引用计数的智能指针, 弱指针不会阻止对象销毁, 使用过程中会遇到指针突然变空的情况. FWeakReferencer() TOps::ReleaseWeakReference(ReferenceController); WeakReferenceCount为 0 时销毁FReferenceController 4.

    7.4K71发布于 2018-12-18
  • 来自专栏ai_houzi

    go语言基础4-指针

    func swap(a, b int) { a, b = b, a } func main(){ a ,b := 3 ,4 swap(a,b) fmt.Println(a,b) //输出为3,4 } func swap(a, b *int) { *a, *b = *b, *a } func main(){ a ,b := 3 ,4 swap(&a,&b) gmt.Println(a,b)//输出为4,3 } go语言指针不能运算 go语言只有值传递一种方式

    44920发布于 2019-04-04
  • 来自专栏C/C++、数据结构、算法

    C语言:深入理解指针(4)

    一、回调函数       函数指针是将函数的地址取出来,再通过函数地址去调用,那为什么不直接用函数名调用呢??原因是因为函数指针可以用来实现回调函数,而回调函数有自己的应用场景。 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。 ,函数指针指向什么函数就调用什么函数,这里其实就是使用的回调函数功能。 4.第四个形参int (*compar)(const void*,const void*));,compar是一个函数指针,返回类型是int类型,两个形参的类型是void*类型。 4.如果想要完成逆序,将int_cmp的代码return(*(int*)p1 - *(int*)p2)中的p1和p2交换即可。

    39010编辑于 2024-02-17
  • 来自专栏全栈程序员必看

    ue4指针_智能指针如何实现自动释放

    UE4也有一套智能指针库,整理了一下做个介绍。也请大家做补充。 因为使用->的时候会先判断智能指针是否有效, 如果无效的话,直接会导致断言(check),随后程序崩溃。下面贴一下重载的->源码 4>和C++11的shareptr一样,内部都是基于引用计数的。 3>切记TSharedRef变量是不允许定义在头文件里面作为成员变量出现的 4>以下四个C++的原生cast方法不适用于这里 不能用于UE4智能指针的转换, 请使用 ConstCastSharedRef UE4的智能指针,就别用C++11的了,因为UE的智能指针能和UE的代码比如一些容器能够方便的使用。 回头我想再出一篇关于 UE4线程的内容 构思好把链接放这。 8>TSharedFromThis本身是8字节。

    1.5K30编辑于 2022-11-09
领券