C艹数组(各种姿势详解)
数组
- 概念
- 一维数组的定义
- 一些初始化的实例
- 一维数组访问
- 指针偏移计算
- 指针数组
- 实例解析指向数组的指针数组
- 探讨数组名aa和&aa
- 多维数组
- 定义多维数组
- 二维数组访问
- 数组作为函数参数
- 随机函数
- 动态存储
- New 和 Delete操作符
- 字符数组与字符串
- 字符数组存放字符串
- 字符串的访问
- 总结
概念
- 数组是由一定数目的同类元素顺序排列而成的结构类型数据
- 一个数组在内存占有一片连续的存储区域
- 数组名是存储空间的首地址
- 数组的每个元素用下标变量标识
一维数组的定义
格式:类型 标识符 [表达式]
类型
数组元素
类型标识符
数组名存储地址表达式
数组元素个数,常整型表达式
数组的类型:
请清晰理解每个定义细节作用对象,不要混淆。
一些初始化的实例
int a [ 5 ] = { 1, 3, 5, 7, 9 }; //各元素分别赋初值int b1 [ 5 ] = { 0 } ; //全部元素初始化为0 int b2 [ 5 ] = { 1, 2, 3, } ; //b2[3],b2[4]自动赋0 int c [ ] = { 1, 2, 3, 4, 5, 6, 7 } ; //自动定义数组长度为7 int d [ 5 ] = { 1, 2, 3, 4, 5, 6, 7 } ; //错误,初始化数据过多
注意:
C++不提供对数组下标范围检查。
一维数组访问
- 以下标方式访问数组
访问格式:数组名 [表达式]
数组名:数组的地址;
表达式:整形表达式,地址偏移值;
例:a[1],a[2]…
- 以指针方式访问数组
数组名是隐含意义的常指针(直接指针);
其关联类型是数组元素的类型;
注意:直接地址
不能被修改。
例:
指针偏移计算
指针数组
- 指针数组的元素类型是指针;
- 指针数组的元素存放
对象的地址
;
格式:类型 * 标识符 [ 表达式 ]
标识符:数组名;
表达式:数组长度;
类型 * :数组元素类型;
例:
int * pi [ 3 ] ; //数组元素是关联类型为整型的指针float * pf [ 5 ] ; //数组元素是关联类型为浮点型的指针char * ps [ 10 ] ; //数组元素是关联类型为字符型的指针
实例解析指向数组的指针数组
例:
double (*pf[3])(2);
由内而外分解:
pf
//是长度为3的数组;
*pf[3]
//数组元素是指针;
double (*pf[3])(2)
//指针的关联类型是长度为2的浮点数组double[2];
探讨数组名aa和&aa
多维数组
二维数组
每一个元素是类型相同、长度相等的一维数组。n 维数组
每一个元素是类型相同、长度相等的 n-1 维数组。
定义多维数组
格式:类型 数组名 [ 常量表达式 ] … [ 常量表达式 ]
例:
二维数组访问
以下标方式访问
以指针方式访问
注意:
二维数组名 a 是逻辑上的一个二级指针, a [ i ] 是一级指针;
用二维数组名引用基本类型时,应当是二级引用,但不能直接把二维数组名赋给二级指针变量,因为不管 n 维数组,数组名仅是内存块首地址。
数组作为函数参数
数组元素作参数的性质与简单变量相同
数组名作参数传递地址
数组元素和数组名都可以作为引用参数
随机函数
Visual C++的标准库(stdlib.h)提供两个用于产生随机数的函数:
- rand()
随机函数。返回0~32767的随机值。该函数没有参数; - srand ( number )
种子函数。要求一个无符号整型参数置随机数生成器的启动值;
为使种子值可变,用系统时间做srand函数的参数:
- time()
时间函数,在time.h定义。用0作参数时,返回系统当前时间;
动态存储
C++的动态存储分配机制可以根据需要在程序运行时建立和撤销对象。
New 和 Delete操作符
new 运算符动态分配堆内存
语法格式:
指针变量 = new 类型(常量);
指针变量 = new 类型[表达式];
作用:从堆分配一块“类型”大小的存储空间,返回首地址;
其中:“常量”是初始化值,可缺省;
创建数组对象时,不能为对象指定初始值;delete 运算符释放已分配的内存空间
语法格式:
delete 指针变量;
delete [] 指针变量;
其中:“指针变量”必须是一个 new 返回的指针;
字符数组与字符串
C++没有字符串类型,以字符数组作字符串:
‘\0’ 为字符串结束标志
‘\0’ 是ASCII码为0的不可显示字符,即“空操作符” ;对字符数组以字符串常量进行初始化时,自动添加 ‘\0’
字符数组存放字符串
- 不添加’\0’(字符)
- 自动添加’\0’(字符串)
字符串的访问
- 字符串常量、字符数组名、字符指针都表示字符串;
- 输出字符指针就是输出整个字符串(全部字符);
- 输出字符指针的间接引用是输出单个字符;
- 字符串名的直接比较是地址比较;
总结
- 数组以线性关系组织对象。一个n维数组的每个元素是n-1维数组。
- 数组元素以下标表示它在数组中的位置,称为下标变量。
- 使用指针数组,可以管理复杂的对象,例如字符串、函数以及类对象。
- 数组占有一片连续的存储空间。数组名表示这片存储空间的首地址。
- 使用new和delete算符能够动态地申请和收回内存空间。
- C++可以把字符指针作为“字符串变量”使用,实现对字符串的“名”访问。
- string是C++预定义的类,它提供了对字符串更安全和方便的操作。
- 排序、查找、比较、复制等是数组的常用操作。
C艹数组(各种姿势详解)相关推荐
- ES5和ES6数组遍历方法详解
ES5和ES6数组遍历方法详解 在ES5中常用的10种数组遍历方法: 1.原始的for循环语句 2.Array.prototype.forEach数组对象内置方法 3.Array.prototype. ...
- 旋转排序数组系列题详解
旋转排序数组系列题详解 文章目录 旋转排序数组系列题详解 一.问题描述:旋转数组的最小数字 二.分析:二分查找 三.代码 四.问题描述:寻找旋转排序数组中的最小值 五.分析:二分搜索 六.代码 七.问 ...
- c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别
详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...
- C语言 字符数组 和 字符串 详解
C语言 字符数组 和 字符串 详解 用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ...
- pythonprint字节按照16进制输出_对python以16进制打印字节数组的方法详解
对python以16进制打印字节数组的方法详解 一.问题描述 如果直接用print打印bytes的话,有时候会直接显示ascii对应的字符,看起来很蛋疼. 二.运行效果 上面一行是直接用print打印 ...
- linux jq 遍历数组,jquery 遍历数组 each 方法详解
JQuery拿取对象的方式 $('#id') :通过元素的id $('tagName') : 通过元素的标签名 $('tagName tagName') : 通过元素的标签名,eg: $('ul li ...
- java生成字符串数组_Java 生成随机字符串数组的实例详解
Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List之后,往其中添加十条随机字符串 2.每条字符 ...
- C语言数组之间赋值详解
数组之间的赋值,C语言数组之间赋值详解 (biancheng.net)
- python的对象数组_Python当中的array数组对象实例详解
计算机为数组分配一段连续的内存,从而支持对数组随机访问: 由于项的地址在编号上是连续的,数组某一项的地址可以通过将两个值相加得出,即将数组的基本地址和项的偏移地址相加. 数组的基本地址就是数组的第一项 ...
- jQuery数组处理完全详解
jQuery的数组处理.便捷.功能齐全.最近的项目中用到的比较多,深感实用,一步到位的封装了很多原生JavaScript数组不能企及的功能.最近时间紧迫,今天抽了些时间回过头来看jQuery中文文档中 ...
最新文章
- python怎么读取pdf为文本_python怎么读取pdf文本内容
- MaxCompute 实现增量数据推送(全量比对增量逻辑)
- 伪集群zookeeper模式下codis的部署安装
- 怎么修改html的空格大小,如何改变空格的大小 word空格间隔很大怎么调整
- securecrt使用_SecureCRT会话丢失原因及解决方法
- jmeter tps指标在哪里看_性能之路——性能测试连载 (3)-性能指标
- HDU-3337 Guess the number 测试输入数据
- tv盒子助手android版本下载,当贝TV盒子助手
- 绘图杂记【1】Python、R等绘图
- Word文档怎么添加删除线
- CCF推荐会议(人工智能与模式识别)
- 【文献阅读】大脑中与音乐体验和与音乐错误(冲突)监测相关的神经激活
- cobalt strick 4.0 系列教程 (5)--- 获取立足点
- Python爬虫实战(2)之爬取NBA球队各个球员头像图片
- MuseScore入门教程(一、下载,并新建乐谱)
- linux 硬盘满了如何处理
- 阿里,京东,蚂蚁面试题
- 在贵州大数据峰会上,马云再次语出惊人!
- carsim输入模块设置问题
- JavaScript与jQuery
热门文章
- 这届年轻人,没到 35 岁就开始准备退休了
- 危机下的车展,该看看百度Apollo车联网
- 【debug日记】pycharm报错:“error: no commands supplied”
- 【蓝桥杯】第十三届省赛第二场 Python 大学 B 组 题解
- java程序员玩游戏吗_Java程序员:工作还是游戏 该好好衡量一下
- KB5013942更新失败
- 解决css图片和文字不在一条水平线上
- 微信8.0更新,表情会动了,快去仍个炸弹!
- 点到反比例函数最短距离怎么求_谁教教我反比例函数距离公式?
- linux脚本 校准时区,Linux中自动校准时间,并且非常好用。