• C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器

四、数组

(一)数组标准

  1. 以数组名作函数参数时,实参数组与形参数组都不必定义长度(即数组名可以做实参或形参),因此实参与形参的结合方式是地址结合,与数组长度无关对于一维数组是正确的,但对于一维以上是错误的(二维数组声明为形参的时候,必须要保留第二维的大小,当使用指针的时候,需要用数组指针)

  2. 不能用字符串常量对字符数组名进行整体赋值操作,因为数组名是常量任何时候都不能赋值,同样数组名之间是不能彼此赋值的

  3. 定义数组,中括号内必须是常量表达式(常量表达式是指值不会改变且在编译过程中就能够得到计算结果的表达式,能在编译时求值的表达式(例如const声明的)),常量表达式的值必须为正整数且大于等于1

  4. 引用数组元素时,数组下标可以是表达式、变量、常量,但必须都为正整数

  5. 在C++中,虽然数组名是一个指向数组首地址的指针,但是,数组名是一个常量指针,所以不能对数组名直接进行++操作。可以重新定义指针,指向数组首地址,对其进行++操作

  6. 二维数组是按行优先存储的

  7. 不允许使用引用数组

  8. 数组不是数据的集合,因为:

① 数组的长度不可变,集合的长度可变

② 数组存储的是同一个类型的数据,集合可以存储不同类型的数据

③ 数组既可以存储基本数据类型,也可以存储引用类型。集合只能存储引用类型

  1. 不能一次引用整个数组中的全部元素值

  2. 对于字符数组可以一次性输出整个数组中的字符(cout<<数组名;),但是对于数值类型的数组,只能利用循环进行逐个输出了

(二)数组使用

  1. 在函数体内定义动态数组(例:int A[10](后面没赋初值)),其元素没有初始化,为一个随机值

  2. char a[]="xyz"//对的,字符数组初始化值,可以用双引号括起的字符串实现,但使用双引号字符串初始化数组时,字符个数必须比所定义的数组元素个数小1个

3. 基本类型数组的默认值

① byte[],short[],int[] ,默认值为0

② long[],默认值是0L

③ bool[]默认值为0

④ float[],double[],默认值为0.0

⑤ char数组默认值是‘‘

⑥ 对象类型数组:默认值为null

  1. 在C++中,auto* arr = new int[2]{ 1, 2 };//该定义数组的方式在C++11之后正确,但若用new分配数组空间时不能指定初值例:new int[2]->该定义在C++11前

  2. int[] arr = { 1, 2 };//不正确,因为这是c#的语法,不是c++的

  3. char s[5]={"abc"}等价于char s[5]=

  4. 如果想使一个数组中全部元素的值为0,可以写成int a[10]={0*10};

  5. char a[] = {0, 1, 2, 3, 4, 5};//正确赋值

  6. 一个字符数组的话'\0'并不是必须的,但用赋初值方式来定义字符串,其中,'\0'是必须的;例:char str1[] = {'s', 't', 'r', '1', '\0'};

  7. int m []={1,2,3,4,5,6,7,8,9,0};

    int(p)[4]=(int()[4])m; // p是行指针,(int()[4])是格式类型转换,目的是为了把一维数组m强行转化成二维数组。因为这个二维数组的第二维大小为4,但是你的m中的元素个数为10,那么你的一维大小为10/4+1=3,即int (p)[4] 相当于int p[3][4]={{1,2,3,4},{5,6,7,8},{9,0}}

  8. 数组作为函数的参数,传递的是数组的地址,由于形参数组就是实参数组,所以函数调用时不会为形参数组分配存储空间

  9. 多维数组作为函数的参数,形参数组第1维可以与实参相同,也可以不同;可以是任意长度,也可以不写长度;但其他维的长度需要相同

  10. int t[3][2];可以用t[2]正确表示某个数组元素地址的表达式 // t[2]相当于&t[2][0]

  11. 字符数组只有在初始化时才能使用“=“...””这种整体赋值形式,初始化完成后就不能这么使用了

15. 数组的下标表示法处理速度与指针表示法处理速度比较(谭书P165页写着指针表示法比下标法快):

① 指针的访问速度比数组下标的快的情况:就是使用++运算

for (int i=0;i<size;i++) *(p++)=i; (1)

for(int i=0;i<size;i++) p[i]=i; (2)

对于指针访问速度快,主要是因为很多的机器指令中实现了++运算,他可以使用一个指令周期就完成,

对于数组的下标访问,他需要先获得数组的起始地址,计算偏移量,找到真正的访问地址

② 数组要比指针快的情况:

定义数组a[size] ,*p=a.假如要访问 a[i]

  1. 通过 a 访问

    系统只需要计算常量 a 与 i*sizeof(type) 之和,然后访问该地址

  2. 通过 p 访问

    P+是个变量,系统必须先访问 p 的地址,得到 p 的值,然后计算该值 v(p) 与 i*sizeof(type) 之和, 然后再访问得到的地址。

相比之下,(II) 要稍微慢一些(指针慢)。

C++篇:第四章_数组_知识点大全的更多相关文章

  1. Net基础篇_学习笔记_第九天_数组_冒泡排序(面试常见题目)

    冒泡排序: 将一个数组中的元素按照从大到小或从小到大的顺序进行排列. for循环的嵌套---专项课题 int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 ...

  2. Net基础篇_学习笔记_第九天_数组_三个练习

    练习一: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...

  3. Java语言程序设计(基础篇) 第七章 一维数组

    第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...

  4. Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

    第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service m ...

  5. C++_系列自学课程_第_7_课_数组_《C++ Primer 第四版》

    说到数组,大家应该都很熟悉,在C.Pascal.Java等语言中,都有数组的概念.在C++中也提供了对数组的支持.数组简单来说就是一堆相同 数据类型对象的集合. 这里要把握住两个要点: 相同的数据类型 ...

  6. 《Thinking in Java》十四章类型信息_习题解

    1~10    Page 318 练习1. 在ToyTest.java中,将Toy的默认构造器注释掉,并解释发生的现象. 书中代码如下(略有改动): package org.cc.foo_008; p ...

  7. PHP:第四章——PHP数组处理函数

    <pre> <?php //数组处理函数 header("Content-Type:text/html;charset=utf-8"); //compact(); ...

  8. PHP:第四章——PHP数组查找,替换,过滤,判断相关函数

    <pre> <?php //查找,替换,过滤,判断相关函数 header("Content-Type:text/html;charset=utf-8"); /*知 ...

  9. PHP:第四章——PHP数组添加,删除,插入,分割,合并,及运算符

    <pre> <?php header("Content-Type:text/html;charset=utf-8"); /*知识点一:赋值运算符 = 代码示例:数 ...

  10. PHP:第四章——PHP数组array_intersect计算数组交集

    <pre> <?php //array_intersect计算数组交集 header("Content-Type:text/html;charset=utf-8" ...

随机推荐

  1. 记一次Redis Cluster Pipeline导致的死锁问题

    作者:vivo 互联网服务器团队- Li Gang 本文介绍了一次排查Dubbo线程池耗尽问题的过程.通过查看Dubbo线程状态.分析Jedis连接池获取连接的源码.排查死锁条件等方面,最终确认是因为 ...

  2. 【matplotlib 实战】--箱型图

    箱型图(Box Plot),也称为盒须图或盒式图,1977年由美国著名统计学家约翰·图基(John Tukey)发明.是一种用作显示一组数据分布情况的统计图,因型状如箱子而得名. 它能显示出一组数据的 ...

  3. CF1766B [Notepad#]

    Problem 题目简述 给你一个整数 \(n\) 和字符串 \(s\),问:能不能在小于 \(n\) 次操作的情况下,输出字符串 \(s\). 有两次操作可供使用: 在已打出内容的最后添加一个字符. ...

  4. BFF层提升业务性能实际解决方案,以及nodeJs和KOA框架介绍

    本文干货满满,介绍了用BFF层(Back-end For Front-end)中间层提升性能的整体解决方案和思路,涉及前期技术调研,聚合业务分析,聚合方法,验收,最后向同学们普及node.koa基础知 ...

  5. java学习内容-1

    java学习内容-1 (一)jdk的使用 (二)定义标识符的规则 (三)java常用类 1.String类 2.Math类 3.Integer和Double类 4.输出 5.Scanner类 例子 ( ...

  6. 小景的Dba之路--压力测试和Oracle数据库缓存

    小景最近在做系统查询接口的压测相关的工作,其中涉及到了查询接口的数据库缓存相关的内容,在这里做一个汇总和思维发散,顺便简单说下自己的心得: 针对系统的查询接口,首次压测执行的时候TPS较低,平均响应时 ...

  7. 查看API官方文档

    盛年不重来,一日难再晨.及时宜自勉,岁月不待人.   学习一门语言, 了解其开发文档必不可少.开发文档就是我们在编程开发.维护.升级过程中的参考最全面.最权威的资料.我认为就是开发者为后人方便理解留下 ...

  8. MySQL-char与 varchar 的区别?

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin 1.共同点: 都是字符串类型 2.不同点: ①.char类型是定长数据类型.,对于数据插入的速度比较块,在有大量插入需 ...

  9. 2020牛客多校第一场B(虚树)

    参考博客 #include<cstdio> typedef long long ll; const int N = 2e5 + 50; int n, cnt, top, tot; int ...

  10. 数据分析工具 Datainside、Power BI、帆软(FineReport)怎么选?

    Datainside.Power BI和帆软(FineReport)都是数据分析领域常用的工具,它们各自有不同的特点和适用场景.下面将会详细介绍每个工具的功能和优势,以便您进行选择. Datainsi ...