ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++ 中数组与字符串

2022-07-26 18:00:23  阅读:126  来源: 互联网

标签:初始化 int 元素 C++ 数组 字符串 new 指针


一、数组的特征

  1. 数组是存放类型相同的对象的容器,这些对象没有名称,只能根据其所在的位置来进行访问。
  2. 数组的大小是确定不变的,不能随意增加删除元素。
  3. 数组中的元素在内存中是连续的。
  4. 数组会最终会退化成指针,指针的地址即为数组的首元素地址。
  5. 数组的性能会优于vector, 但操作灵活性会有所损失。
  6. 字符类型的数组在表示C类型的字符串时,其结尾必须要有 \0 作为结束符。

二、 一般数组声明与定义

1、 栈上的数组

  • 数组在编译的时候,其维度(即元素的个数)必须是已知的。所以其维度必须是常量或常量表达式
  • 由于数组会隐式的退化成指向首元素的指针(即数组名),所以不能用数组的内容来初始化或者直接赋值给其它数组
int arr11[4];                 //声明一个长度为10的整型数组
int arr12[4] = { 1,2,3,4};    //初始化一个数组, 右边元素个数不能超过4个
int arr13[] = { 1,2,3,4,5 };  //初始化数组,根据初始化的元素来推断元素的个数。

//为数组进行赋值:由于数组会隐式的退化成指针 只能对每个元素进行赋值
arr11[0] = 1;
arr11[1] = 1;
arr11[2] = 1;
arr11[3] = 1;

arr11 = arr12;       // 错误: 不能把一个数组直接赋值给另一个数组。
int arr14[] = arr12; // 错误: 不能用一个数组初始化另一个数组。
int *arr15 = arr12;  // 正确: 定义一个指针来指向arr12数组,arr12代表一个指针

int num1 = 10;
constexpr int num2 = 10;
int arr16[num1];              //错误:num1 不是常量表达式
int arr17[num2];              //正确:num2 为常量表达式

2、堆上的数组 —— 动态数组

  • new 会返回指向该数组首元素的指针,也是该数组的指针地址
  • 动态数组元素的个数可以不是常量表达式
  • new 的动态数组需要释放,否则会造成内存泄漏的问题
int num = 4;
int* arr21 = new int[num];          // 正确: 动态数组不需要 num 为常量表达式,且 num 可以为 0.
int* arr22 = new int[4];            //new 一个长度为4的整型数组,未进行初始化。
int* arr23 = new int[4]();          //new 一个长度为4的整型数组, 并将其所有值按默认值进行初始化, 整型数组默认值为0
int* arr24 = new int[4]{ 1,2,3,4 }; // 正确: 初始化元素个数必须小于等于指定要 new 的元素个数(在此即为4个元素)

动态数组的释放:销毁 new 的动态数组中的元素,并释放所分配的内存空间。数组中的元素按逆序销毁,即最后一个元素先被销毁,然后是倒数第二个,依次来销毁所有的元素。

// arr 必须指向一个动态分配的数组或为空
delete[] arr

三、字符数组与字符串

由于 C 语言并没有字符串,而是使用以空字符\0为终止符的字符数组来表示字符串,即常说的C-Style字符串,一般利用指针来操作这些字符串。


参考资料:

  1. C + + 基础—— 数组

标签:初始化,int,元素,C++,数组,字符串,new,指针
来源: https://www.cnblogs.com/Jeffxu/p/16521984.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有