数组

  • 概念
  • 一维数组的定义
    • 一些初始化的实例
    • 一维数组访问
    • 指针偏移计算
  • 指针数组
    • 实例解析指向数组的指针数组
    • 探讨数组名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艹数组(各种姿势详解)相关推荐

  1. ES5和ES6数组遍历方法详解

    ES5和ES6数组遍历方法详解 在ES5中常用的10种数组遍历方法: 1.原始的for循环语句 2.Array.prototype.forEach数组对象内置方法 3.Array.prototype. ...

  2. 旋转排序数组系列题详解

    旋转排序数组系列题详解 文章目录 旋转排序数组系列题详解 一.问题描述:旋转数组的最小数字 二.分析:二分查找 三.代码 四.问题描述:寻找旋转排序数组中的最小值 五.分析:二分搜索 六.代码 七.问 ...

  3. c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别

    详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...

  4. C语言 字符数组 和 字符串 详解

    C语言 字符数组 和 字符串 详解 用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ...

  5. pythonprint字节按照16进制输出_对python以16进制打印字节数组的方法详解

    对python以16进制打印字节数组的方法详解 一.问题描述 如果直接用print打印bytes的话,有时候会直接显示ascii对应的字符,看起来很蛋疼. 二.运行效果 上面一行是直接用print打印 ...

  6. linux jq 遍历数组,jquery 遍历数组 each 方法详解

    JQuery拿取对象的方式 $('#id') :通过元素的id $('tagName') : 通过元素的标签名 $('tagName tagName') : 通过元素的标签名,eg: $('ul li ...

  7. java生成字符串数组_Java 生成随机字符串数组的实例详解

    Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List之后,往其中添加十条随机字符串 2.每条字符 ...

  8. C语言数组之间赋值详解

    数组之间的赋值,C语言数组之间赋值详解 (biancheng.net)

  9. python的对象数组_Python当中的array数组对象实例详解

    计算机为数组分配一段连续的内存,从而支持对数组随机访问: 由于项的地址在编号上是连续的,数组某一项的地址可以通过将两个值相加得出,即将数组的基本地址和项的偏移地址相加. 数组的基本地址就是数组的第一项 ...

  10. jQuery数组处理完全详解

    jQuery的数组处理.便捷.功能齐全.最近的项目中用到的比较多,深感实用,一步到位的封装了很多原生JavaScript数组不能企及的功能.最近时间紧迫,今天抽了些时间回过头来看jQuery中文文档中 ...

最新文章

  1. python怎么读取pdf为文本_python怎么读取pdf文本内容
  2. MaxCompute 实现增量数据推送(全量比对增量逻辑)
  3. 伪集群zookeeper模式下codis的部署安装
  4. 怎么修改html的空格大小,如何改变空格的大小 word空格间隔很大怎么调整
  5. securecrt使用_SecureCRT会话丢失原因及解决方法
  6. jmeter tps指标在哪里看_性能之路——性能测试连载 (3)-性能指标
  7. HDU-3337 Guess the number 测试输入数据
  8. tv盒子助手android版本下载,当贝TV盒子助手
  9. 绘图杂记【1】Python、R等绘图
  10. Word文档怎么添加删除线
  11. CCF推荐会议(人工智能与模式识别)
  12. 【文献阅读】大脑中与音乐体验和与音乐错误(冲突)监测相关的神经激活
  13. cobalt strick 4.0 系列教程 (5)--- 获取立足点
  14. Python爬虫实战(2)之爬取NBA球队各个球员头像图片
  15. MuseScore入门教程(一、下载,并新建乐谱)
  16. linux 硬盘满了如何处理
  17. 阿里,京东,蚂蚁面试题
  18. 在贵州大数据峰会上,马云再次语出惊人!
  19. carsim输入模块设置问题
  20. JavaScript与jQuery

热门文章

  1. 这届年轻人,没到 35 岁就开始准备退休了
  2. 危机下的车展,该看看百度Apollo车联网
  3. 【debug日记】pycharm报错:“error: no commands supplied”
  4. 【蓝桥杯】第十三届省赛第二场 Python 大学 B 组 题解
  5. java程序员玩游戏吗_Java程序员:工作还是游戏 该好好衡量一下
  6. KB5013942更新失败
  7. 解决css图片和文字不在一条水平线上
  8. 微信8.0更新,表情会动了,快去仍个炸弹!
  9. 点到反比例函数最短距离怎么求_谁教教我反比例函数距离公式?
  10. linux脚本 校准时区,Linux中自动校准时间,并且非常好用。