初识指针 4.0

再来深入了解一下指针吧!


前言

在前面我们已经了解到了指针的一些基本概念与用法,在本节,咱们再来对指针进行更加深一步的了解。少年郎不怕前路难,让我们一起向前进发吧!


一、回调函数

这里给大家一个形象的比方:想象你去一家特别的餐厅吃饭。你坐下后,服务员过来问你要点什么。你可以点一份菜单上已经定义好的套餐,这就像是调用一个普通的函数。但有时你可能想要定制自己的套餐,你可以告诉服务员一些特定的需求,比如你想要不同的配菜或者加辣。这时,服务员会记下你的要求,然后把它们带给厨师。 回调函数其实就是一个通过函数指针调用的函数。不知道大家还记得上一节中咱们在结尾介绍的--计算机,其中有一些代码是简单冗余的

这些代码一眼看去,有大半都是相同的操作,只有其中的调用函数有所不同,这时候,咱们想能不能定义一个函数,可以随意调用自己想用的函数,那么那么相同的代码就不用写好多次了,于是就出现了-------回调函数

现在看这些代码是不是更加简洁了。所以以后咱们再遇到这种要写好几个这样有着相同操作,仅仅调用函数有所区别的就可以试试回调函数了。

二、qsort函数

在之前我们已经学过了一种排序方法——冒泡排序法,但是这种排序方法只能针对的数据类型是整型,至于其他数据类型:字符型,浮点型,结构体型,它就没办法进行排序了。

那么,今天咱们再来介绍一种排序方法:qsort --->quick sort快速排序法,它可以排序任意数据类型。这个函数的形式如下所示:

base指的是所要排序的数组首个元素的指针(地址);

num指的是所要排序的数组的元素个数;

size指的是所要排序的数组中的每个元素的字节数大小;

最后一个是一个函数指针(用于判断大小),这个函数的返回值如下:

注意:qsort函数的头文件是   #include<stdlib.h>。

下面是qsort函数进行排序的具体代码演示:

现在,咱们可以试试将咱们之前所学过的冒泡排序来模拟实现qsort

现在看,qsort函数是不是很好用,心动不如行动啊,少年,赶紧把这个学会掌握吧。


三、sizeof和strlen

sizeof 计算变量所占内存内存空间大小的,单位是 字节,如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。 sizeof 只关注占⽤内存空间的大小,不在乎内存中存放什么数据。sizeof(地址)时,在x86的编译环境下是4,在x64的编译环境下是8。

strlen 是C语言库函数(它要包含一个头文件#include<string.h>),功能是求字符串⻓度。函数原型如下:size_t strlen ( const char * str ); 统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。 strlen 函数会⼀直向后找 \0 字符,直到找到为止,所以可能存在越界查找。

注意:在strlen(地址)中,如果该地址是一个有效的字符串首地址,加上1可能会指向字符串中的下一个位置,也就是空字符 ‘\0’ 的位置。在 C 语言中,'\0' 被认为是字符串结束的标志,所以在计算字符串长度时,strlen() 遇到空字符会停止计数,并返回当前索引减一,因为是从 0 开始计数的。所以你得到的可能是 strlen() 认定的字符串实际长度减去 1,看起来像是 -1,但实际上是指向空字符的位置。但是,如果地址加1后的值不是有效的字符串起始位置,比如不是一个字节的边界,或者不是任何已知字符的地址,那么结果就可能是不确定的,甚至可能出现不可预知的数值,这通常不会是 - 1。

下面是sizeof与strlen的对比:

下面用几个例子,来让我们再具体深刻地了解这两个在数组,在指针里面的应用:

ps:在使用sizeof(),strlen()计算长度的时候,打印结果时的占位符用%zd

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值