C++程序设计:数组与指针的等价表示
需积分: 16 81 浏览量
更新于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万+
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析