C++ Primer 第3章 3.5 数组 总结和练习

本文详细介绍了C++ Primer第三章3.5节关于数组的内容,包括定义、初始化、访问元素、指针与数组的关系,以及C风格字符串的使用。文中强调了数组的固定大小、数组与vector的区别,并给出了多个练习题及其解答,帮助读者深入理解数组的使用技巧和注意事项。
摘要由CSDN通过智能技术生成

仅供参考,欢迎交流和指正 power by Qi

3.5.1 定义和初始化内置数组

1.数组和vector的区别之一在于数组的大小是固定的,灵活性不足。数组需要在编译时就确定数组大小,所以声明数组时,维度必须为常量表达式。

unsigned a = 1;
int b[a] ;//error
int b[get_size()];//get_size()为常量表达式时,正确
--------------------------------
constexpr unsigned a = 1;
int b[a]//正确

注意,这种方式定义的数组,其变量名字是一个常量,无法改变,虽然没有显示的声明,但是如果我们对其进行修改,编译器将会报错。

int a[10];
a=1;//报错

但是使用如果指针指向new出来的空间则不会报错

int *p = new int[3];
p++;//正确

2.内置类型的数组,在定义时如果没有显式初始化,会被默认初始化。就和内置类型的默认初始化一样,为全局变量时初始化为0,但是为局部变量时,通常是一个随机值。

3.数组的定义不能使用auto关键字,数组中的必须存放对象,因此不存在引用数组

4.数组在使用列表初始化时,可以不写明第一维的维度,如果写明了数组的维度,则列表中元素的个数要小于或者等于数组的维度。列表中的元素按照顺序初始化靠前的元素

int a[] = {
   1,2,3,4};//true
int a[4] = {
   1,2,3,4};//true
int a[4] = {
   1,2,3};//true,
int a[4] = {
   1,2,3,4,5};//error 初始化列表中元素的个数大于维度
int a[2][2] = {
   1,2,3,4} //true 按照顺序初始化数组中的元素
//对于这种方法的进一步思考,可以视为多维数组在c++中是按照行优先的形式保存的

int a[10] = {
   };//如果这样初始化,数组中的元素将指向值初始化,在这里是0

5.字符数组可以使用字符串字面值来初始化,注意字符串字面值的结尾包含了结束符’\0’,所以字符串的长度要+1,用于存储结束符。但是string类不会存储结束符。二者都会在第一次遇到结束符时,截取字符串

char a[] = "hello \0 word";
string b = "hello \0 word";
cout << a << endl;
cout << b << endl;

--------------
hello
hello

6.数组不允许拷贝和赋值

int a [] = {
   233,233,233};
int b[]=a;//error
int b[3];
b = a;//error

思考那么数组怎么传递参数呢?

7.复杂的数组声明

int arr[10];
int *p[10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值