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

【时时三省】(C语言基础)指针数组和多重指针

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

什么是指针数组

一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。下面定义一个指针数组:

int * p [ 4 ];

由于[]比*优先级高,因此p先与[ 4 ]结合,形成p [ 4 ]形式,这显然是数组形式,表示p数组有4个元素。然后再与p前面的“*”结合,“*”表示此数组是指针类型的,每个数组元素(相当于一个指针变量)都可指向一个整型变量。注意不要写成

int ( * p ) [ 4 ];

定义一维指针数组的一般形式为

类型名*数组名[数组长度];

类型名中应包括符号“*”,如“int *”表示是指向整型数据的指针类型。

什么情况下要用到指针数组呢?指针数组比较适合用来指向若干个字符串,使字符串处理更加方便灵活。例如,图书馆有若干本书,想把书名放在一个数组中,然后要对这些书目进行排序和查询。按一般方法,字符串本身就是一个字符数组。因此要设计一个二维的字符数组才能存放多个字符串。但在定义二维数组时,需要指定列数,也就是说二维数组中每一行中包含的元素个数(即列数)相等。而实际上各字符串(书名)长度一般是不相等的。如按最长的字符串来定义列数,则会浪费许多内存单元。

可以分别定义一些字符串,然后用指针数组中的元素分别指向各字符串。如果想对字符串排序,不必改动字符串的位置,只须改动指针数组中各元素的指向(即改变各元素的值,这些值是各字符串的首地址)。这样,各字符串的长度可以不同,而且移动指针变量的值(地址)要比移动字符串所花的时间少得多。

例题1:

将若干字符串按字母顺序(由小到大)输出。

解题思路:

定义一个指针数组name,用各字符串对它进行初始化,即把各字符串中第1个字符的地址赋给指针数组的各元素。然后用选择法排序,但不是移动字符串,而是改变指针数组的各元素的指向。

编写程序:

运行结果:

程序分析:

在main函数中定义指针数组name,它有5个元素,其初值分别是“Follome " , " BASIC " , " Great Wall " , " FORTRAN”和“Computer design”这5个字符串的首字符的地址。这些字符串是不等长的。

sort函数的作用是对字符串排序。sort函数的形参name也是指针数组名,接受实参传过来的name数组首元素(即name [ 0 ])的地址,因此形参name数组和实参name数组指的是同一数组。用选择法对字符串排序。strcmp是系统提供的字符串比较函数,name [ k ]和name [ j ]是第k个和第j个字符串首字符的地址。strcmp ( name [ k ] , name [ j ] )的值为:如果name [ k ]所指的字符串大于name [ j ]所指的字符串,则此函数值为正值;若相等,则函数值为0;若小于,则函数值为负值。if语句的作用是将两个串中“小”的那个串的序号( k或i之一)保留在变量k中。当执行完内循环for语句后,从第i串到第n串这些字符串中,第k串最“小”。若k = i就表示最小的串不是第i串。故将name [ i ]和name [ k ]对换,也就是将指向第i个字符串的数组元素(是指针型元素)的值与指向第k个字符串的数组元素的值对换,也就是把它们的指向互换。

 

http://www.lryc.cn/news/601942.html

相关文章:

  • xhs小红书直播自动插件使用
  • 习题综合练习
  • 动态规划 (Dynamic Programming) 算法概念-JS示例
  • CentOS 9 配置国内 YUM 源
  • web刷题
  • 每日算法刷题Day55:7.27:leetcode 复习完第K小/大+栈4道题,用时1h50min
  • OpenCv中的 KNN 算法实现手写数字的识别
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ipywidgets’问题
  • 《 集成异步任务与定时调度:线程池与任务中心设计》
  • 特殊成员函数的生成规则:Effective Modern C++条款17解析
  • ES6模块详解:核心语法与最佳实践
  • 蛋白质反向折叠模型-ProteinMPNN安装教程
  • 【通识】设计模式
  • 设计模式(七)结构型:适配器模式详解
  • KNN算法实现图片的识别
  • 《频率之光:群星之我》
  • LINUX727 磁盘管理回顾1;配置文件回顾
  • 黑马程序员C++核心编程笔记--类和对象--运算符重载
  • 2116. 判断一个括号字符串是否有效
  • AI技术革命:产业重塑与未来工作范式转型。
  • 2025第15届上海生物发酵展将于8月7号启幕
  • Python训练Day25
  • 入侵检测介绍
  • Linux之shell脚本篇(三)
  • 51核和ARM核单片机OTA实战解析(二)
  • 自然语言处理NLP (1)
  • Java 集合进阶:从 Collection 接口到迭代器的实战指南
  • 基于多智能体的任务管理系统架构设计与实现
  • 【DataWhale】快乐学习大模型 | 202507,Task08笔记
  • 卷积神经网络研讨