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

C语言—指针3

1. 数组名的理解

观察以下代码

可以观察到pa指向的地址与数组首元素地址相同,那么可以说明数组就是首元素地址吗?

这种说法是不严谨的,观察以下代码:

程序输出的结果为16,此时的arr表示的是整个数组的大小。

观察以下代码

可以观察到,pc1与数组名指向的位置的相同,但是此时pc1等于&ch,表示的是整个数组的地址,pc2为&ch+1,输出的地址指向数组后的地址,与首元素地址相差7byte,&arr是数组的地址,+1 操作是跳过整个数组的。

2.⼀维数组传参的本质与指针访问数组

一维数组传参的本质是将首元素的地址作为参数进行传参,而函数的参数为数组时,会将其转换为指针变量对数组的首元素地址存储,对其访问时使用下标引用操作符和解引用操作符,两者的转换关系:arr[i]=*(arr+i)=*(i+arr)=i[arr]。

3. 冒泡排序

冒泡排序(Bubble Sort)是最简单和最通用的排序方法,其基本思想是:在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此下去,直至最终完成排序 。由此可得,在排序过程中,大的数据往下沉,小的数据往上浮,就像气泡一样,于是将这种排序算法形象地称为冒泡排序 。

假设需要排序的的元素有2个:2,1,只需要交换一趟,一趟交换一次,如果有3个元素:3,2,1  ,第一趟需要3和2交换:2,3,1,再将3和1交换,2,1,3;第二趟只需要将2和1交换:1,2,3;2个元素需要1趟,3个元素需要2趟,因此n个元素需要n-1趟;当有三个元素时,第一趟交换次数位2次,第二趟交换次数为1次,每一趟交换好后下一趟交换的次数减一,程序如下:

但是此时程序的效率还是比较低的,遇到有序的数时,需要将两层for循环全部执行程序才终止,此时可以创建一个变量来表示序列是否有序,如果序列已经有序就停止排序,同时创建一个计数变量来统计有无创建flat变量分别执行判断的次数。

没有创建flat变量:45

创建flat变量统计的次数:35

4. ⼆级指针

二级指针本质也是指针,大小为4/8个字节,用来存储一级指针的地址:

二级指针的使用与一级指针的使用类似,*ppa得到是pa存放的地址,**ppa解引用通过pa存放的地址找到变量a.

5. 指针数组

指针数组的使用

6.实现一个函数,可以左旋字符串中的k个字符

例:abcdef左旋两个字符得到cdefab

法一:将首元素存放于临时变量,然后依次将后一个元素存放于前一元素位置,最后将临时变量存放于字符串末尾。

法二:开辟一块空间,将需要左旋字符部分后的字符串先拷贝到创建的空间,再将需要左旋的部分追加到到已经拷贝部分的后面,最后将左旋后的字符串重新拷贝到需要左旋的字符串中。

法三:先实现一个逆序字符串函数,第一次调用部分是需要左旋的部分,第二次调用是不需要左旋的部分,第三次调用是整体逆序。

7. 字符指针变量

字符指针变量是用来存放字符类型数据的地址的,类型为char*,使用的方式与整型指针变量类似,使用取址操作符操作变量,将地址存放于字符指针变量中,解引用操作可以改变变量的值。

《剑指offer》中收录的⼀道和字符串相关的笔试题:

str3和str4都是被const修饰的字符指针,指向的字符串为常量字符串,其内容不可被修改,因此str3和str4指向的是同一内存空间,因此str3与str4相等;str1与str2字符串的内容虽然相同,但是两者的指向不相同,str1与str2指向的是内存的不同空间,因此str1与str2不相等。如果需要比较字符串的内容,可以使用strcmp函数比较。

8. 数组指针变量

8.1 数组指针的概念

数组指针本质为指针,大小4/8个byte,指向的内容为数组。

8.2 数组指针的初始化与使用

数组指针指向的内容为数组,该指针存放的是整个数组的地址,将整个数组地址存放在数组指针变量完成初始化,解引用操作找到数组首元素地址,通过下标引用操作符访问数组元素。

9. ⼆维数组传参的本质

⼆维数组传参,形参的部分可以写成数组,也可以写成指针形式,写成数组的形式编译器编译时会转换为指针的形式,二维数组传参的本质是首行元素地址。

10.有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

相关文章:

  • 若依定制pdf生成实战
  • gradle3.5的安装以及配置环境变量
  • PX4开始之旅(二)通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信
  • 力扣题解:21.合并两个有序链表(C语言)
  • 2025数维杯数学建模C题完整分析参考论文(共36页)(含模型、可运行代码、数据)
  • 赛季7靶场 - Environment
  • Android 移动应用开发:页面跳转与数据传递功能
  • Android屏蔽通话功能和短信功能
  • MySQL(4)如何查看MySQL数据库的版本?
  • 『不废话』之Python 3.14 Beta版新特性
  • 【传感器】代码——DHT11温湿度传感器
  • 从0开始学linux韦东山教程第一三章问题小结(1)
  • 4.2java包装类
  • STM32--PWM--函数
  • 微软系统 红帽系统 网络故障排查:ping、traceroute、netstat
  • 40-算法打卡-二叉树-深度优先(前、中、后序遍历)-递归遍历-第四十天
  • 蓝绿激光对潜通信介绍
  • 《微机原理》微机程序段 计算机编程数据分区
  • 量化交易策略的运行
  • 【赛元8523触摸按键开发调试】
  • 中非民间对话在赞比亚举行
  • 安徽亳州涡阳县司法局党组书记刘兴连落马
  • 纪念|古文字学泰斗裘锡圭:“还有很多事情要做”
  • 复旦发文缅怀文科杰出教授裘锡圭:曾提出治学需具备三种精神
  • 人民日报评“组团退演出服”:市场经济诚信原则需全社会维护
  • 上海发布预付卡消费“10点提示”:警惕“甩锅闭店”套路