21天学通C++学习笔记(四):数组和字符串

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
      • push_back将数字插入到数组末尾,这个矢量动态地调整其长度,以存储更多数据。
      • 矢量、模板
  • 一定要初始化变量和数组,否则它将包含最后一次存储在相应内存单元中的值。

2. 字符串

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

猜你喜欢

转载自www.cnblogs.com/wyp1988/p/10006346.html