您当前的位置: 首页 >  c++

RuiH.AI

暂无认证

  • 0浏览

    0关注

    274博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++学习 五、数组与字符串 (1)数组

RuiH.AI 发布时间:2022-01-20 14:50:40 ,浏览量:0

C++学习 五、数组与字符串 (1)数组
  • 前言
  • 数组
    • 数组声明
    • 数组访问
      • 索引越界问题
    • 数组初始化
      • 禁止数组赋值
      • C++11禁止缩窄转换(列表初始化)

前言

本篇继续C++学习,指针前置章节,数组和字符串。

数组 数组声明
// 数组类型 数组名 [元素数]
int arrayA[6]; // 元素数必须是常量

上面的数组声明会开辟一块储存6个int类型变量的内存空间。

数组访问
// 元素索引从0开始
arrayA[0] = 0;
arrayA[5] = 5;

索引从0开始,到数组长度-1为止。

索引越界问题

注意:编译器并不检查数组索引是否有效,比如代码arrayA[8] = 8;索引越界,虽然可以过编译,但运行就报segment fault!

数组初始化

在声明数组的同时给元素赋值,就是数组初始化,数组的列表初始化:

int arrayB[5] = {0, 1, 2, 3, 4};

C++11中可以省略等号:

int arrayC[5] {0, 1, 2, 3, 4};

默认初始化,编译器自动把数组元素设为0:

int arrayD[5] {};
// arrayD[4] = 0;

部分初始化,编译器把其它数组元素设为0:

int arrayE[5] {0, 1, 2};
// arrayE[4] = 0;

通过初始化确定数组长度:

int arrayF[] {0, 1, 2, 3};
// arrayF len is 4
禁止数组赋值

注意:只有在声明数组的同时才能初始化数组。

int arrayG[5];
// arrayG[5] = {0, 1, 2, 3, 4}; // error!

不能把一个数组直接赋值给另一个数组。

int arrayH[5];
// arrayH = arrayB; // error!
C++11禁止缩窄转换(列表初始化)

首先举一个缩窄转换的例子:

short aaa = 11111111; 

左边是short变量,右值是int常量,编译器报overflow in implicit constant conversion,也就是说右值超过了short变量的范围,导致转换结果不确定。这就是缩窄转换。

C++11在列表初始化时禁止缩窄转换,常见的缩窄转换有:浮点型转整形,double转float,超过数值范围的长整型转短整型(例如uint8_t aa = 1111;),超过范围的整型转char等。

不过,在低于C++11的版本中,列表初始化可以缩窄转换。

关注
打赏
1658651101
查看更多评论
立即登录/注册

微信扫码登录

0.0483s