#include<iostream>
using namespace std;
int main(){
/*
数组特点:
放在一块连续内存空间中
数组中每个元素的数据类型相同
下标从0开始索引
*/
//数组定义定义方式3种
// 1
int arr[5]; //定义
arr[0] = 10; //赋值
arr[1] = 20;
//arr[2], arr[3], arr[4] = 30, 40, 50; //这样赋值,访问时读取地址?还是没附上?
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
cout << arr[4] << endl; //访问
cout << endl;
// 2
int arr2[5] = {10, 20, 30, 40, 50}; //注意是大括号
//这种定义赋值方式,若在初始化数据时未全部填写完,则会用0来填补。
//例:int arr2[5] = {10, 20, 30} == {10, 20, 30, 0, 0}
cout << arr2[3] << endl;
for (int i=0; i<5; i++){
cout << arr2[i] << endl;
}
cout << endl;
// 3
// 定义数组时必须有初始长度,比如int arr[5] 或 int arr2[5] = {10, 20, 30, 40, 50} 或 int arr3[] = {30, 20, 10}(这种算长度3的数组)
int arr3[] = {90, 80, 70, 60, 50, 40, 30, 20, 10};
for (int i=0; i<9; i++){
cout << arr3[i] << endl;
}
cout << endl;
/*
一维数组名称用途:
可以统计整个数组在内存中的长度
可以获取数组再内存中的首地址
*/
// 1
// 之前,用sizeof(数据类型/变量名)可以得到数据类型长度,现在也可以用来统计数组长度
cout << sizeof(arr3) << endl; // 36 整个数组占用内存空间大小
cout << sizeof(arr3[0]) << endl; // 4 数组中单个元素占用内存空间大小
cout << sizeof(arr3)/sizeof(arr3[0]) << endl; // 9 数组中元素个数==数组长度
// 2
cout << "数组首地址:" << arr3 << endl; // 16进制
cout << "数组首地址:" << (int)arr3 << endl; // 10进制
for (int i=0; i<sizeof(arr3)/sizeof(arr3[0]); i++){
cout << "第" << i+1 << "个元素的首地址" << (int)&arr3[i] << endl; // 用&取单个元素的首地址
}
// 注意,数组名是一个常量,不可以对其赋值;例arr3 = 100错误
cout << endl;
/*
案例--找数组最大元素值
五只小猪称体重,找到最重的猪
*/
int arr4[5] = {300, 350, 200, 400, 250};
int max_w = 0;
for (int i=0; i<5; i++){
if (arr4[i] > max_w){
max_w = arr4[i];
}
}
cout << "最重的小猪体重:" << max_w << endl;
cout << endl;
/*
案例--数组元素逆置
*/
// 数组长度-1=末尾元素下标
int arr5[5] = {1, 3, 2, 5, 4};
cout << "数组逆置前:" << endl;
for (int i=0; i<5; i++){
cout << arr5[i] << endl;
}
// 实现逆置思路:
// 记录起始下标位置和结束下标位置
// 起始下标和结束下标的元素互换;起始位置++,结束位置--
// 循环执行上句,直至起始位置>=结束位置
int start_p = 0;
int end_p = sizeof(arr5)/sizeof(arr5[0]) - 1;
while (start_p < end_p){
int temp = arr5[start_p];
arr5[start_p] = arr5[end_p];
arr5[end_p] = temp;
start_p++;
end_p--;
}
cout << "数组逆置后:" << endl;
for (int i=0; i<5; i++){
cout << arr5[i] << endl;
}
return 0;
}