1. 数组

  • 概念

    • 是一组元素
    • 这些元素是相同的数据类型
    • 按顺序存储到内存中
    • 目的是避免在业务需要时去重复声明很多同类型的变量
  • 初始化
    • 分别初始化:int i [5] = {1,2,3,4,5};
    • 全部初始化:int i [5] = {}; 或 int i [5] = {0};
    • 部分初始化:int i [5] = {1,2};
    • 长度参数可以也只可以用常量
    • 如果知道每个元素的初始值,可以不指定数组包好的元素数,传几个就是多长:int i [] = {1,2};
  • 访问和修改元素数据
    • 索引从0开始访问数组元素:i[0]
    • 虽然索引可以达到甚至超过数组长度,但取回的值就不确定是什么了,有安全和稳定性的风险,甚至会崩溃,所以要避免。
  • 多维数组
    • C++的多维数组其实只是模拟,本质还是单向的一维顺序存储
    • 初始化时可以以多维的形式,也可以一维的形式:int i[2][2] = {{1,2},{3,4}}; 或 int i[2][2] = {1,2,3,4};
    • 最好以循环的方式访问和操作多维数组,代码更多且不易出错
  • 动态数组
    • 不像静态数组那样提前预留了很多内存空间
    • std::vector
      • #include
      • vector dynArray (3); dynArray[2] = 1; dynArray.push_back(0);
      • push_back将数字插入到数组末尾,这个矢量动态地调整其长度,以存储更多数据。
      • 矢量、模板
  • 一定要初始化变量和数组,否则它将包含最后一次存储在相应内存单元中的值。

2. 字符串

  • C风格字符串

    • 是特殊的字符数组
    • 以'\0'结尾,编译器会帮忙给字符串字面量结尾加上'\0','\0'是一个字符,表示空,即让编译器插入空字符或零
    • 如果字符数组包含多个'\0',那么当成字符串使用时,会被截断。但数组长度没有变,sizeof的结果还是完成的长度
    • 使用C风格的字符串来存储用户输入很不安全,用户可能输入比数组长度更长的字符串。
    • 很危险,比如cout使用字符数组,如果忘了加'\0',会多打印垃圾字符。某些情况下甚至导致程序崩溃。strcpy、strcat、strlen也是这样
    • 浪费一个字符,考虑限制长度时容易忘记考虑
  • C++字符串
    • 更高效、更安全
    • 是动态的,容量自动增大
    • #include
    • .length()
    • 自动初始化为默认值
  • cout将不断读取字符,直到终止空字符。因此变量空间要足够。
  • \可用于cout语句的换行

21天学通C++学习笔记(四):数组和字符串的更多相关文章

  1. 21天学通C++学习笔记(九):类和对象

    1. 类和对象 现实中的人等事物往往具备一些特征并且可以做某些事情,要在程序中模拟这些事物,需要一个结构,将定义其属性(数据)以及其可用这些属性执行的操作(函数)整合在一起.这种结构就是类,而这种结构 ...

  2. 21天学通C++学习笔记(八):指针和引用

    1. 简述 C++最大的优点之一是,既可以用它来编写不依赖于机器(主要是内存)的高级应用程序,又可以用它来编写与硬件紧密协作的应用程序. 事实上C++让您能够在字节和比特级调整应用程序的性能,而要编写 ...

  3. 21天学通C++学习笔记(七):函数

    1. 为什么需要函数 可将应用程序的内容划分成依次调用的逻辑块,让您能够划分和组织程序的执行逻辑,有助于提高可重用性. 2. 基本概念 是子程序,可接受参数,可有返回值. 要让函数执行其任务,必须调用 ...

  4. 21天学通C++学习笔记(二):C++程序的组成部分

    1. 预处理器编译指令 预处理器是一个在编译前运行的工具. 预处理器编译指令是向预处理器发出的命令,总是以磅字符#大头. #include让预处理器获取指定文件并将它们放在编译指令所处的位置.#inc ...

  5. 21天学通C++学习笔记(三):变量和常量

    1. 简述 内存是一种临时存储器,也被称为随机存取存储器(RAM),所有的计算机.智能手机及其他可编程设备都包含微处理器和一定数量的内存,用地址来定位不同的存储区域,像编号一样. 硬盘可以永久的存储数 ...

  6. 21天学通C++学习笔记(一):入门

    1. 基础概念 1.1 编程语言 旨在让人更容易得使用计算资源,充分利用电脑,不用人做一些重复劳动或持续参与. 1.2 可执行文件 是可运行的成品,应按程序员希望的那样做. 1.3 生成可执行文件的步 ...

  7. JS学习笔记 (四) 数组进阶

    1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...

  8. Objective-C 学习笔记(四) 数组

    Objective-C 数组作为函数参数传递 如果想在一个函数作为参数,通过一维数组,就必须声明函数形式参数 方式一    指针作为形式参数 - (void) myFunction(int *) pa ...

  9. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

随机推荐

  1. C++11 类的六个默认函数及其使用

    六个默认函数: 构造函数(construct) 析构函数(destruct) 复制构造函数(copy construct) 赋值(assign) 移动构造函数(move construct) 移动赋值 ...

  2. 二进制(signed or unsigned)补码

    在计算机系统中,数值一律用补码来表示(存储). 主要原因:使用补码,可以将符号位和其它位统一处理:同时,减法也可按加法来处理.另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃 ...

  3. Python中常见的异常处理

    异常和错误 part1:程序中难免出现错误,而错误分成两种 1. 语法错误(这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范一 if # 语法错误示范二 d ...

  4. Java面向对象-String类

    1,实例化String对象 有两种方式,我们直接看代码: package com.java1234.chap03.sec08; public class Demo1 { public static v ...

  5. Linux批量“解压”JAR文件

    当你需要”解压“很多jar文件时,可以通过很多方式进行,比如下面这种 1,列出每一个jar文件名,逐个展开 for i in $(ls *sour*.jar);do jar xvf $i;done

  6. javascript第四节

    闭包: 块级作用域: 私有变量:

  7. new Com

    CreateOleObject System.Win.ComObj.hpp #include <objbase.h>     Winapi.ActiveX.pas   CoInitiali ...

  8. 解读show slave status 命令判断MySQL复制同步状态

    解读show slave status 命令判断MySQL复制同步状态 1. show slave status命令可以显示主从同步的状态 MySQL> show slave status \G ...

  9. 不要向没权力&能力的人证明自己的能力

    [不要向没权力&能力的人证明自己的能力] 不是所有的上级都有足够的权力和能力.一个没权力的Leader,即使你向他证明了自己的能力,你所能获得的也只能是他的邮件表扬的荣誉.对于加薪,他能给的仅 ...

  10. 03.WSDL分析

    自己做一个程序放到tomcat里面这个就是服务,自己安装一个oracle,oracle启动之后那它本身就是一种服务. WebService就是HTTP,那么它和HTTP有什么不同呢? HTTP GET ...