前天我们学习了什么是数组,今天我们来学习数组名的两大用途以及两个例题。
请先思考这几个个问题:
1)如何用数组名获取数组占用内存空间的大小;
2)如何获取数组的地址;
3)如何利用数组比较出数组内的最大值;
4)如何使得数组中元素逆置。
用sizeof运算符计算内存(上一篇有介绍siaeof)
令该数组名称为arr
先看代码:
#include
using namespace std;
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建一个数组
cout << "整个数组所站内存空间为:" << sizeof(arr) << endl;//利用sizeof运算符算出所占内存空间
}
输出结果是:
这里的40是怎么来的呢,原来是前面定义的是int整形,而int整形占用空间是4个字节,故4*10=40
加以拓展还可以算出(1)每个元素所占的内存空间及(2)数组的元素个数:
(1)只需在数组后加一个[]并且在[]加入元素的位置。从首个元素start到最后一个end编号为0,1,2,3,4,5~~。
(2)求出整个数组的内存以及单个数组内存后,可以计算出该数组有多少个元素:
sizeof( arr ) / sizeof( arr[0] )即元素个数。
代码如下:
#include
using namespace std;
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建一个数组
cout << "整个数组所站内存空间为:" << sizeof(arr) << endl;//利用sizeof运算符算出所占内存空间
cout << "每个元素所占空间为:" << sizeof(arr[0]) << endl;
cout << "数组元素个数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
}
输出结果:
获取地址直接cout就行,但是直接出来的是16进制的,所以在数组名的前面加一个(int)转换成10进制。
要单个元素地址呢还要在(int)后面加一个&。
代码如下
#include
using namespace std;
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建一个数组
//cout << "整个数组所站内存空间为:" << sizeof(arr) << endl;//利用sizeof运算符算出所占内存空间
//cout << "每个元素所占空间为:" << sizeof(arr[0]) << endl;
//cout << "数组元素个数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
cout << (int) arr << endl;//数组的地址
cout << (int)&arr[0] << endl;//首个元素的地址
}
输出结果:
可以看到数组的地址和首个元素的地址是相同的,而第二个字符呢,如图:
先认定一个最大值,再用for循环和if条件语句即可得出数组中的最大值。
代码如下:
#include
using namespace std;
int main()
{
int arr[] = { 300,350,200,400,250 };//创建一个数组
int max = 0;
for (int i = 0; i < 5; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
cout << "数组中的最大值是:" << max << endl;
}
输出结果:
1)首先要将首末元素倒置则要先创造一个容器来暂存首末元素。
如int temp = arr[start] 存放首项
再arr[start] = arr[end] 转换首项的值
再arr[end] = int temp 完成一次转换
2)要想完成多个元素的转换则需要使用while循环。
在1)的基础上对start进行++,对end进行--再循环即可。
代码如下:
#include
using namespace std;
int main()
{
int arr[] = { 1,2,3,4,5 };
cout << "正序:" << endl;
for (int i = 0; i < 5; i++)
{
cout << arr[i]<< endl;
}
cout << "倒序:" << endl;
int start = 0;
int end = sizeof(arr) / sizeof(arr[0]) - 1;
while (start < end)
{
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
for (int i = 0; i < 5; i++) {
cout<