数组
概念:一个用于存放相同数据类型的集合/容器。
特点:
1.数组中的元素的数据类型都是相同的;
2.数组占用的是一段连续的空间。
索引:
索引都是从0开始的,这里面的0相当于我们日常使用中的1。只是换了一种方式而已。
数组名的规范:
1.数组名的命名规范和变量的命名规范一样,且数组名和变量名不能重复。
#include<iostream>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<iomanip>
using namespace std;
int main(void){
//一维数组的声明
//方式一:数据类型 数组名称[长度];
int array_0001[5];//直接指定数组的长度
//方式二:数据类型 数组名称[长度] = {值};
int array_0002[5] = {1,2,3};//值的个数<数组的长度
//方式三:数据类型 数组名称[] = {值};
int array_0003[] = {1,2,3,4,5,6};//值的个数决定数组的大小
cout << "array_0002的地址是:" << array_0002 << endl;//数组名称代表的是数组的首地址
cout << "&array_0002[0]是:" << &array_0002[0] << endl;//数组首元素的地址和数组名称的地址是相同的
cout << "数组array_0002的长度为" << sizeof(array_0002) / sizeof(array_0002[0]) << endl;
//输出结果:
//array_0002的地址是:0x6ffdc0
//&array_0002[0]是:0x6ffdc0
//数组array_0002的长度为5
/*
虽然说数组名称和数组首元素都可以得到数组的地址,但是这两个还是有所不同的。
我理解的是:数组首元素的地址,只能代表该元素的地址;而数组名称反应出来的地址是数组的首地址,可通过数组名称来计算数组的长度。
sizeof(数组名称) /sizeof(数组名称[0])
*/
//一维动态数组(使用指针声明的)数据类型* 数组名称;
//方法一:
int* array_0004;
array_0004 = new int[5];
//方法二:
int* array_0005 = new int[5];
if(array_0004 == NULL || array_0005 == NULL){
cout << "内存分配错误" << endl;
exit(1);
}
//方法一和方法二是相同的效果,只不过是方法二将方法一中的两个步骤合并为了一个步骤。
delete[] array_0004,array_0005;
/*
二维数组:
声明:
数据类型 数组名[ 行数 ][ 列数 ];
数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2} ,{数据3,数据4} };
数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
对于二维数组的声明格式有以上四种,我们可以根据不同的使用情况来选择使用哪种声明格式进行声明。
*/
int array_0006[3][3];
int array_0007[3][3] = {{1,2,3},{1,2,3},{1,2,3}};
int array_0008[3][3] = {1,2,3,1,2,3,1,2,3};
int array_0009[][3] = {1,2,3,4,5,6,7};//3行3列,将缺少的值赋值默认值0;
//动态二维数组的申请:
int** array_0010;
array_0010 = new int*[3]; // 创建一个包含3个指针的一维数组
if(array_0010 == NULL){
cout << "内存分配错误" << endl;
exit(1);
}
}
for(int i = 0;i < 3;i++){
array_0010[i] = new int[3];/// 为每个指针分配一个包含3个整数的数组
}
for(int i = 0;i < 3;i++){
if(array_0010 == NULL){
cout << "内存分配错误" << endl;
exit(1);
}
}
for(int i= 0;i < 3;i++){
cout << "请输入第"<< i + 1 <<"行的3个数字" << endl;
for(int j = 0;j < 3;j++){
cin >> array[i][j];
}
}
/*
关于数组名称在二维数组中的作用:
反映占用内存空间大小:sizeof(arr)
反映第 i 行占用内存空间大小:sizeof(arr[i])
反映某个元素占用内存空间大小:sizeof(arr[i][j])
反映二维数组的行数:sizeof(arr) / sizeof(arr[0])
反映二维数组的列数:sizeof(arr[0]) / sizeof(arr[0][0])
获取二维数组的首地址:
二维数组首地址:arr[0] 或 &arr[0][0]
二维数组第1个元素的地址: arr[0] 或 &arr[0][0]
二维数组第 0 行的地址: arr或arr[0]或arr + 0 【或*(arr + 0)】
二维数组第 i 行的地址:arr[i]或arr + i 【或*(arr + i)或&a[0] + i】
注意:
注:arr[0]或&arr[0][0]:二维数组首元素的地址 ;
二维数组名arr:二维数组第0行(首行)的地址,等价于arr[0]或arr + 0
二维数组第 i 行首元素的地址:arr[i]或arr + i或*(arr + i)或&a[0] + i
二维数组第 i 行第 j 列元素的地址:&arr[i][j]或*(arr + i) + j
通过指针解引用访问或操作某元素:*(*(arr + i) + j)
*/
return 0;
}