文章目录
一.数组的概述
数组(array):从字面意思来看,是数据的组合。
从数学的角度来讲,就一些数字组合在一起,变成了集合。
特点1:数据类型相同的数据才能存放到一起,不同数据类型的数据是不能放在一起的。
例如·,整型和字符串型不能放在一起。
特点2:数据的位置是采用连续下标的方法进行存储,初始下标为0。
下标英文是index,例如 arr[index] 。
数组元素的下标是从0开始索引的。
二.定义一维数组的三种方法
①数据类型 数组名[数组长度];
int arr[3];
②数据类型 数组名[数组长度]={值1,值2,…};
int arr[3]={0,1,2};
③数据类型 数组名[ ]={值1,值2,…};
int arr[]={0,1,2};
1.定义一维数组的第一种方法
逻辑思路:先定义长度,相当于创造一个内存空间。我们再逐步地将数组一个一个地存进空间里。接着,我们就可以访问元素。
#include<iostream>
using namespace std;
int main ()
{
int arr[3]; //定义数组长度
arr[0]=10; //数组赋值
arr[1]=20;
arr[2]=30;
//访问数据元素
cout << arr[2] << endl; //数组的第三个数,下标为2
return 0;
}
如果想要访问其他数组元素,修改下标就可以了。
2.定义一维数组的第二种方法
这种方法是将定义和赋值,是同时进行,可以减少代码行数。但是,第一种方法和第二种方法的结果一样,步骤也是一样,思路也没变,唯一改变的是定义和赋值同时进行。
#include<iostream>
using namespace std;
int main ()
{
int arr[3]={10,20,30}; //定义数组,并且进行赋值
//访问数据元素
cout << arr[2] << endl; //数组的第三个数,下标为2
return 0;
}
用循环遍历数组
#include<iostream>
using namespace std;
int main ()
{
int arr[]={0,1,2};
for(int i=0;i<3;i++) //用循环遍历数组
{
cout << arr[i] << endl; //下标的范围变成了i的初始值到i最后的值
}
return 0;
}
案例:定义长度为4,但是元素只有3个,还是1个是没有赋值的。所以,我们可以从运行结果当中可以得出结论。
结论:没被赋值的内存位置,在循环遍历的时候,数组的内存位置会被默认传值为0
#include<iostream>
using namespace std;
int main ()
{
int arr[4]={0,1,2};
for(int i=0;i<4;i++) //用循环遍历数组
{
cout << arr[i] << endl; //下标的范围变成了i的初始值到i最后的值
}
return 0;
}
3.定义一维数组的第三种方法
定义数组的时候,必须要有初始长度。
#include<iostream>
using namespace std;
int main ()
{
int arr[]={0,1,2};
for(int i=0;i<4;i++) //用循环遍历数组
{
cout << arr[i] << endl; //下标的范围变成了i的初始值到i最后的值
}
return 0;
}
我把4去掉了之后,数组的长度就会被编译器识别为3,所以,第四次访问的数据就不在是数组里的元素了。
三.一维数组名的用途
1.统计整个数组内存中的长度
我们需要用到sizeof(数组名)来统计内存大小
#include<iostream>
using namespace std;
int main ()
{
int arr[]={0,1,2};
for(int i=0;i<4;i++) //用循环遍历数组
{
cout << arr[i] << endl;
cout <<"每个数组元素占用内存的大小为" << sizeof(arr[i]) << endl;
cout << endl;
}
cout << "整个数组占用的内存为" << sizeof(arr) << endl;
cout << "数组中的元素个数为" << sizeof(arr)/sizeof(arr[0]) << endl;
return 0;
}
运行结果
2.获取数组在内存中的首地址
查看数组的首地址,要用强制转换,例如
(int)arr :将数组元素转成十进制。
(int)&arr[下标]:查看数组中某一个的元素地址。
四.一维数组的案例
1.求最大值
流程图
#include<iostream>
using namespace std;
int main ()
{
int arr[3]={40,30,70}; //创建一个数组
int max=0; //设置一个最大值的变量
for(int i=0;i<3;i++) //循环遍历
{
if(arr[i]>max) //如果数组元素值比最大值还要大
{
max=arr[i]; //那么数组元素值就赋值给max
}
}
cout <<"最大值为:" << max << endl; //打印最大值
return 0;
}
运行效果
2.元素逆置
#include<iostream>
using namespace std;
int main ()
{
int arr[4]={40,30,70,10}; //创建一个数组
int i;
cout << "元素逆置前:";
for(i=0;i<4;i++) // 用了递增的方法,正向遍历
{
cout << arr[i] << "\t";
}
cout << endl << "元素逆置后:" ;
for(i=3;i>=0;i--) //用了递减的方法,反向遍历
{
cout << arr[i] << "\t";
}
return 0;
}
运行效果
五.一张图理解一维数组
六. 总结
①数组名的命名规范与变量命名规范一致,不要和变量重名。
例如,有了arr这个数组名之后,就不可以再出现跟arr一模一样的变量。
②数组中的下标从0开始索引,索引的意思是通过下标找到相对应的数据。
③数组是可以赋值的。
④数组名是一个常量,不可以进行赋值操作。
将arr[]定义为数组之后,是不可以对数组名arr进行赋值的,因为它已经在内存中占据了位置。
篇章
上一篇:C++基础教程7-循环结构
下一篇:C++基础教程9-二维数组