C++程序设计:数组与指针的等价表示
需积分: 16 75 浏览量
更新于2024-08-19
收藏 8.66MB PPT 举报
"这篇PPT源自《C++程序设计》一书,由谭浩强编著,清华大学出版社出版。内容涵盖了C++语言的基础知识,包括C++的发展历史、C语言的特点以及C++对C语言的扩展。"
在C++编程中,数组和指针的使用是非常关键的一部分,题目中提到了四种不同的数组和指针定义方式,让我们逐一分析它们的含义:
1. `char s[3][5]={"aaaa","bbbb","cccc"};` 这是一个二维字符数组,它定义了3个长度为5的字符数组,每个数组存储一个字符串。实际上,由于字符串常量末尾自动添加的空字符`\0`,每个字符串实际占用6个字符空间,但这里只分配了5个,因此最后一个字符串"cccc"可能无法完整存储。
2. `char **s1={"aaaa","bbbb","cccc"};` 这是一个指向指针的指针,s1是一个指针,它指向一个指针数组,该数组包含3个元素,每个元素都是一个指向字符的指针。这个定义方式并不等同于上面的二维数组,因为它没有为每个字符串分配空间,而是直接指向了字符串常量的内存地址。
3. `char *s2[3]={"aaaa","bbbb","cccc"};` 这是一个字符指针数组,s2是一个数组,包含3个元素,每个元素是一个字符指针,分别指向了三个字符串常量的首地址。这种方式与前面的二维数组定义是等价的,因为每个元素都指向了独立的内存空间,存储了完整的字符串。
4. `char s3[][3]={"aaaa","bbbb","cccc"};` 和 `char s4[][4]={"aaaa","bbbb","cccc"};` 这两个定义有些微妙的区别。s3是一个未指定长度的二维数组,编译器会根据初始化的字符串长度自动推断列数,这里由于"aaaa"的长度,它会被推断为3列。而s4则明确指定了每个子数组有4个元素,但由于"cccc"只有3个字符,所以最后一个字符串后面会有一个未使用的空位。
总结来说,等价于原始二维数组`char s[3][5]`的是`char *s2[3]`,因为它们都为每个字符串分配了足够的空间。其他定义则有不同的内存布局和使用方式。理解这些概念对于进行C++编程至关重要,特别是涉及到动态内存分配、指针操作和数组处理时。
2014-03-18 上传
132 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
慕栗子
- 粉丝: 19
- 资源: 2万+
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码