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

【时时三省】(C语言基础)使用字符指针变量和字符数组的比较

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

用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈,主要有以下几点。

( 1 )字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),绝不是将字符串放到字符指针变量中。

( 2 )赋值方式。可以对字符指针变量赋值,但不能对数组名赋值。

( 3 )初始化的含义。对字符指针变量赋初值:

char * a = " I love China ! " ;

等价于

char a;

a = " I love China !”;

而对数组的初始化:

char str [ 14 ] = " I love China !”;

不等价于

char str [ 14 ] ;

str [  ]= " I love China !”;

数组可以在定义时对各元素赋初值,但不能用赋值语句对字符数组中全部元素整体赋值。

( 4 )存储单元的内容。编译时为字符数组分配若干存储单元,以存放各元素的值,而对字符指针变量,只分配一个存储单元( VisualC++为指针变量分配4个字节)。

如果定义了字符数组,但未对它赋值,这时数组中的元素的值是不可预料的。可以引用(如输出)这些值,结果显然是无意义的,但不会造成严重的后果,容易发现和改正。

如果定义了字符指针变量,应当及时把一个字符变量(或字符数组元素)的地址赋给它,使它指向一个字符型数据,如果未对它赋予一个地址值,它并未具体指向一个确定的对象。此时如果向该指针变量所指向的对象输入数据,可能会出现严重的后果。

( 5 )指针变量的值是可以改变的,而字符数组名代表一个固定的值(数组首元素的地址),不能改变。

( 6 )字符数组中各元素的值是可以改变的(可以对它们再赋值),但字符指针变量指向的字符串常量中的内容是不可以被取代的(不能对它们再赋值)。

( 7 )引用数组元素。对字符数组可以用下标法(用数组名和下标)引用一个数组元素(如a [ 5 ]),也可以用地址法(如*(a + 5))引用数组元素a [ 5 ]。如果定义了字符指针变量p,并使它指向数组a的首元素,则可以用指针变量带下标的形式引用数组元素(如p [ 5 ]),同样,可以用地址法(如*(p + 5))引用数组元素a[5]。

但是,如果指针变量没有指向数组,则无法用p [ 5 ]或* ( p + 5 )这样的形式引用数组中的元素。这时若输出p [ 5 ]或* ( p + 5 ),系统将输出指针变量p所指的字符后面5个字节的内容。显然这是没有意义的,应当避免出现这种情况。

若字符指针变量p指向字符串常量,就可以用指针变量带下标的形式引用所指的字符串中的字符。

( 8 )用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。

 

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

相关文章:

  • Electron使用WebAssembly实现CRC-16 原理校验
  • Java 二叉树
  • C++11之右值引用与移动语义(提高效率)重要
  • 【Linux指南】Linux系统 -权限全面解析
  • Jetpack ViewModel LiveData:现代Android架构组件的核心力量
  • 病历数智化3分钟:AI重构医院数据价值链
  • AI+Python | 长时序植被遥感:动态·物候·变异归因·RSEI生态评估全流程[特殊字符]
  • C语言(20250718)
  • 车载电子电器架构 --- MCU信息安全相关措施
  • 基于springboot+vue+mysql的在线教育系统(源码+论文)
  • 深入详解随机森林在医学图像质量评估中的应用与实现细节
  • 网络编程Socket linux
  • 【Prometheus+Grafana篇】监控通过Keepalived实现的MySQL HA高可用架构
  • DeepSeek vs ChatGPT:谁更胜一筹?
  • Python 模块未找到?这样解决“ModuleNotFoundError”
  • 02-UE5蓝图初始的三个节点作用
  • RuoYi配置多数据源失效
  • Laravel 系统版本查看及artisan管理员密码找回方法针对各个版本通用方法及原理-优雅草卓伊凡
  • 2025最新版虚幻引擎5(UE5)入门教程:前言——你的随身教程和学习笔记
  • 如何简洁高效的实现存在则更新,不存在则插入
  • HTML前端颜色渐变动画完整指南
  • TPS61194PWPRQ1适用于汽车照明低 EMI、高性能 4 通道 LED 驱动器TPS61194
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页布局实现
  • ppp实验
  • 如何在FastAPI中整合GraphQL的复杂度与限流?
  • QT跨平台应用程序开发框架(11)—— Qt系统相关
  • 了解 ReAct 框架:语言模型中推理与行动的协同
  • 论文Review Lidar 3DGS Splat-LOAM: Gaussian Splatting LiDAR Odometry and Mapping
  • 无人机浆叶安装顺序
  • 客流分析核心算法 trajectory_event_analyzer数据结构