02-2 一维数组数组名
一维数组名称的用途:
前排提示:在笔记中,创建数组
的意思就是声明数组
。
- 统计整个数组在内存中的占用长度(使用
sizeof
关键字。可以翻笔记[sizeof关键字](..\02 数据类型\02 sizeof关键字.md)) - 可以获取数组在内存中的首地址。(数组的首地址就是数组中第一个元素的地址其实......)(直接打印数组名称即可)
int arr[] = {1,2,3,4,5};
//统计整个数组占用长度(使用 sizeof 关键字)
cout << sizeof(arr) << endl;//整个数组占用的大小
cout << sizeof(arr[0]) << endl;//某个元素所占内存空间
cout << sizeof(arr)/sizeof(arr[0]) << endl;//整个数组长度除以单个元素长度等于元素个数
cout << arr << endl;//查询首地址(16 进制的数)
cout << &arr[0] << endl;//查询某个元素的地址
运行一下:结果:(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
20
4
5
0000003987B9F7B8
0000003987B9F7B8
请按任意键继续. . .
小声:如果首地址看不懂,可以强行转成 10 进制的数字。在arr
前强行加上(int)
。比如这样:
cout << (int)arr << endl;
cout << (int)&arr[0] << endl;
运行结果:(当然内存位置不是固定的哈)(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
832174984
832174984
如何理解数组的“连续的内存空间”?([数组笔记](.\01 数组.md))
我们先创建一个数组,然后分别打印每个元素的内存地址。
int arr1[] = {1,2,3,4,5,6,7,8,9,0};
for (int i = 0;i < 10;i++)
{
cout << (int)&arr1[i] << endl;
}
结果:(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
-1548289640
-1548289636
-1548289632
-1548289628
-1548289624
-1548289620
-1548289616
-1548289612
-1548289608
-1548289604
每个内存空间差 4 字节,正好对应 int 所占空间大小([int笔记](..\02 数据类型\01 整型.md))
注意:数组名称是常量,是不可以修改的。数组的元素是变量,是可以修改的。
int arr[] = {1,2,3};
//arr = asfaf; (这是报错的,不可以修改数组名称,这是一个常量)
arr[0] = 10; //可以,元素是变量
在py中,有for i in range
或者直接 for i in arr
。而在c++中是没有的(其实也不是没有,后续说明)。
那么可以这样试试:
#include <iostream>
using namespace std;
int main()
{
int arr [] = {1,2,3,4,5,6,7,8,9,7,6,5,4,3,5,6,2,4,6,3,2,4,6,7,4,2,4,6,7,8,4};
int formax=sizeof(arr)/sizeof(arr[0]);
for (int i=0;i<formax;i++)
{
cout<<arr[i]<<endl;
}
system("pause");
return 0;
}
好我们接着说在c++中像py一样的for在数组里的方法:(谢谢我子佳)
加上头文件#include <array>
然后创建数组的方法是array <数据类型 ,数组长度> 数组名称{元素}
。
之后可以 for (auto 变量名称 : 数组名称)
。
#include <iostream>
#include <array>
using namespace std;
int main()
{
array <int,5> arr{ 1,2,3,4,5 };
for (auto i : arr)
{
cout << i << endl;
}
system("pause");
return 0;
}
结果:(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
1
2
3
4
5
请按任意键继续. . .
这边先写着吧。说不定以后会用上(?)
:-)