zoukankan      html  css  js  c++  java
  • 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 dynArray (3); dynArray[2] = 1; dynArray.push_back(0);
        • push_back将数字插入到数组末尾,这个矢量动态地调整其长度,以存储更多数据。
        • 矢量、模板
    • 一定要初始化变量和数组,否则它将包含最后一次存储在相应内存单元中的值。

    2. 字符串

    • C风格字符串
      • 是特殊的字符数组
      • 以''结尾,编译器会帮忙给字符串字面量结尾加上'',''是一个字符,表示空,即让编译器插入空字符或零
      • 如果字符数组包含多个'',那么当成字符串使用时,会被截断。但数组长度没有变,sizeof的结果还是完成的长度
      • 使用C风格的字符串来存储用户输入很不安全,用户可能输入比数组长度更长的字符串。
      • 很危险,比如cout使用字符数组,如果忘了加'',会多打印垃圾字符。某些情况下甚至导致程序崩溃。strcpy、strcat、strlen也是这样
      • 浪费一个字符,考虑限制长度时容易忘记考虑
    • C++字符串
      • 更高效、更安全
      • 是动态的,容量自动增大
      • #include
      • .length()
      • 自动初始化为默认值
    • cout将不断读取字符,直到终止空字符。因此变量空间要足够。
    • 可用于cout语句的换行
  • 相关阅读:
    __ATTRIBUTE__ 你知多少?【转】
    mount源码分析 【转】
    linux下共享内存mmap和DMA(直接访问内存)的使用 【转】
    mmap DMA【转】
    内存映射MMAP和DMA【转】
    进度条,随机数---demo笔记【原创】
    Linux内核抢占与中断返回【转】
    内核随记(三)--同步(1)【转】
    内核随记(三)--同步(2)【转】
    理解Linux中断 (1)【转】
  • 原文地址:https://www.cnblogs.com/wyp1988/p/10006346.html
Copyright © 2011-2022 走看看