【c++知识点】数组

【概念】
1、数组中的独立变量:索引变量,下标变量或元素
2、方括号中的数字:索引或下标
3、数组的索引变量数目:声明长度或数组长度
4、索引编号从0开始,结束于数组长度-1的整数
5、索引变量可以为任意类型,但同一数组的所有索引变量必然是同一类型(基类型)
6、方括号中的索引可以是整数常量,如int a[10];也可以是表达式(求值结果在0和数组长度-1之间),如int n=2;score[n+1]=10;

【声明】
声明数组时,数组长度可以使用已定义的常量
const int NUM=10;int score[NUM];//注意:数组长度不能使用变量!!部分编译器不兼容


【内存表示】
1、数组各索引变量的位置在内存中相邻;
2、计算机仅记住索引变量a[0]的地址,通过元素的基类型占用的内存空间来计算其他索引变量的地址。
3、常见错误是引用不存在的数组索引,导致内存溢出;

【初始化】
int num[3]={4,21,55};//提供的值少于数组长度,剩余索引变量默认初始化为数组基类型的零值(建议主动初始化)。

【遍历】
int arr[]={3,5,9,14};
for(int x:arr){
 cout<<x<<endl;
}
for(auto x:arr){
 cout<<x<<endl;
}

【函数参数】
1、索引变量作为函数参数时,用法和普通变量一样;
2、整个数组作为函数参数时,需在形参中指明数组长度(只有数组首个索引变量的地址和基类型被传递),此时数组实参自动退化为同类型指针。
int getSize(int data[],int size);//size为数组长度,data[5]内的索引数字会被编译器忽略
//以下为数组退化为指针演示
int getSize(int data[]){return sizeof(data);}
int data[] = {1,2,3,4,5};
cout<<sizeof(data)<<endl;//输出20
cout<<getSize(data)<<endl;//输出8,64位系统下指针长度为8字节
注意:
1、实际调用函数时,提供的实参data不添加[]或索引表达式,如getSize(data,5);
2、数组形参为传引用参数的弱型,作用于数组形参的任何操作都会作用于数组实参
3、常量数组参数用const修饰(通常只修饰数组形参和类形参),数组任何值都不能被修改int getSize(const int data[],int size);

【常用算法】
1、顺序搜索
2、选择排序
3、冒泡排序(较大值如同气泡上浮,连续向数组末尾移动)

【二维数组】
二维数组可以转换为对应的二维显示,第一个索引代表行,第二个索引代表列。
int getSize(int data[][3],int size);
注意:
1、二维数组作为参数传递时,不指定第1维长度(索引数组被编译器忽略),size用于标识第1维长度
2、第1维(甚至更多维)是用于描述基类型,而基类型长度必须被指出!

【动态数组要点】
1、写代码时不指定数组长度,在运行时确定长度
2、数组变量本质是指针变量,指向数组的第一个索引变量
3、数组标识符a可视为指针变量,且指针值不可修改!!
int a[5];int *p=addr;a=p;//非法!!

【动态数组声明&销毁】
int *p=new int[3];//通过new操作符创建
1、动态数组指针的指针类型和数组元素的指针类型是相同的
2、动态数组长度在[]中指出,如果缺失则由系统分配足够大的存储空间
3、delete []p;//销毁动态数组所在的堆内存空间
 

### C++ 数组基础知识 #### 什么是数组数组是一种线性数据结构,用于存储相同类型的多个元素。它通过索引来访问其中的每一个元素,索引通常从 `0` 开始。 #### 定义与初始化 在 C++ 中,可以通过以下方式定义和初始化数组: 1. **简单定义** 使用指定大小来创建一个未初始化的数组。 ```cpp int arr[5]; // 创建了一个长度为5的整型数组 ``` 2. **带初始值列表的定义** 可以在定义的同时给数组赋初值。 ```cpp int arr[] = {1, 2, 3, 4, 5}; // 自动推导数组大小为5 double values[] = {1.1, 2.2, 3.3}; // 推导数组大小为3 ``` 3. **多维数组** 多维数组可以看作是一个数组数组。 ```cpp int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 初始化一个3x3矩阵 ``` #### 访问数组元素 通过索引访问数组中的单个元素: ```cpp int value = arr[0]; // 获取第一个元素 arr[1] = 10; // 修改第二个元素的值为10 ``` 注意:尝试访问超出范围的索引会引发未定义行为[^1]。 #### 遍历数组 遍历整个数组的一种常见方法是使用循环语句: ```cpp for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { cout << arr[i] << " "; } // 或者使用增强型 for 循环(仅适用于C++11及以上) for (auto element : arr) { cout << element << " "; } ``` #### 动态分配数组 如果不知道运行时所需的确切大小,则可利用动态内存管理技术: ```cpp int n; cin >> n; int* dynamicArr = new int[n]; delete[] dynamicArr; // 不再需要时释放内存 ``` 以上就是关于C++数组的一些基本概念及其应用实例[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值