C++程序设计:数组与指针的等价表示
需积分: 16 70 浏览量
更新于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 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
慕栗子
- 粉丝: 20
- 资源: 2万+
最新资源
- 缓冲区溢出深入剖析(快速了解
- BM String Match
- cmd常用命令大全大家很关心不啊
- surfer中文版基础教程
- More Effecitve C++
- Android教程 很好的入门教程
- JSP数据库编程指南,高清,非影印版
- seam+in+action.pdf 中文参考文档
- java学习资料()
- Prentice.Hall.JBoss.Seam.Simplicity.and.Power.Beyond.Java.EE.Apr.2007
- JBoss4.0.pdf 参考文档
- 5分钟熟悉Maven之中文版官方文档翻译
- Git Phrase Book
- struts电子书(学习struts必备)
- 生命线—质量管理手册
- 高质量C++C 编程指南