C++程序设计:数组与指针的等价表示
需积分: 16 158 浏览量
更新于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万+
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录