C++编程:解析数组与指针的等价表示
需积分: 14 83 浏览量
更新于2024-07-14
收藏 8.82MB PPT 举报
"C语言谭老先生力作:等价的数组和指针定义"
在C语言中,数组和指针有着密切的关系,本题考察的是不同类型的数组和指针定义的等价性。以下是给定的四种定义方式的详细解释:
1. `char s[3][5]={"aaaa","bbbb","cccc"};`
这是一个二维字符数组,包含3个子数组,每个子数组长度为5,可以存储4个字符加上结束符'\0'。这种方式定义的数组,每个子数组都初始化为指定的字符串。
2. `char **s1={"aaaa","bbbb","cccc"};`
这是一个二级指针,`s1`是一个指向字符指针的指针。这里的字符串实际上是以字符数组的形式存储的,所以`s1`指向的是这些字符串的首地址,即字符串"aaaa"、"bbbb"、"cccc"的地址。
3. `char *s2[3]={"aaaa","bbbb","cccc"};`
这个定义创建了一个字符指针数组`s2`,包含3个元素,每个元素都是一个字符指针,分别指向字符串"aaaa"、"bbbb"和"cccc"的首字符。
4. `char s3[][3]={"aaaa","bbbb","cccc"};`
这是一种不完全类型声明,由于未指定`s3`第二维的大小,编译器会根据初始化值自动推断。这里,每个子数组长度为3,但实际存储的字符串"aaaa"、"bbbb"、"cccc"超出了3个字符,所以这会导致编译错误,因为"cccc"无法完整存储在3个字符的空间里。
5. `char s4[][4]={"aaaa","bbbb","cccc"};`
这是与`s[3][5]`等价的定义,每个子数组长度为4,可以正确存储每个字符串。虽然第一维没有指定,但由于初始化列表给出了3个元素,编译器会推断出第一维的大小为3。
总结起来,等价于初始定义`char s[3][5]={"aaaa","bbbb","cccc"}`的是`char s4[][4]={"aaaa","bbbb","cccc"}`,因为它们都能正确存储3个长度为4的字符串数组。其他定义,如`s1`和`s2`,表示的是指向字符串的指针,而不是字符数组,因此与原始定义不等价。
2011-05-16 上传
2020-09-04 上传
2021-07-14 上传
2008-12-19 上传
2009-06-03 上传
2024-04-19 上传
2022-11-12 上传
2021-09-14 上传
2022-05-11 上传
琳琅破碎
- 粉丝: 19
- 资源: 2万+
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍