与vector相似,但是数组的大小确认不变
定义和初始化内置数组
constexpr unsigned sz=3;
int arr[sz];//sz为数组的维度,必须是常量
int *parr[sz];//3个指向整数的指针
int (*Parray)[3]=&arr;//Parray为指向一个3维数组的指针
int (&Parray)[3]=arr;//Parry为一个3为数组的引用
int *(&Parray)[3]=parrr;//Parray为数组的引用,存有3个指针
int a1[sz]={0,1,2};
int a2[]={0,1,2,2};
int a3[7]={0,1,2,3,4};//等价于{0,1,2,3,4,0,0}
int a[]=a1;//错误,不允许使用一个数组来初始化另个数组
//字符数组
char a1[]={'a','b'};
char a2[]={'a','b','\0'};
char a3[]="C++";//自动添加字符串结束
访问数组元素
下标访问 类型:size_t
for (auto i: scores)
cout<<i<<" ";//遍历所有元素
指正与数组
数组名也是数组首元素的地址
string nums[]={..};
string *p=nums;
指针也是迭代器
这里写代码片
#include<iostream>
using std::cout;
int main()
{
int ia[] = { 0, 2, 2, 3, 4 };
int *p = ia;
int *p2 = 4 + p;//指正运算
int last = *(p + 4);
cout << *p2 << " " << *p << " " << last;
return 0;
}
//3.36
#include<iostream>
using std::cout;
int main()
{
int arr1[5] = { 0, 3, 2, 3, 4 };
int arr2[5] = { 0, 1, 2, 3, 4 };
int *p1 = arr1;
int *p2 = arr2;
bool flag = true;
for (int i = 0; i < 5; i++)
{
if (*(p1 + i) != *(p2 + i))
flag = false;
}
cout << flag;
return 0;
}
多维数组
实际为数组的数组
#include<iostream>
using std::cout;
int main()
{
int ia[4][3] = {
{ 1, 2, 3 },
{ 2, 3, 4 },
{ 3, 4, 5 },
{ 4, 5, 7 }
};
for (auto &i : ia)//i即为每一行
{//如果不是引用,i会被初始化为该数组内首元素的地址 int*类型
for (auto j : i)//j为i中的每个元素
cout << j;
cout << std::endl;
}
return 0;
}
#include<iostream>
using std::cout;
int main()
{
int ia[4][3] = {
{ 1, 2, 3 },
{ 2, 3, 4 },
{ 3, 4, 5 },
{ 4, 5, 7 }
};
for (auto p = ia; p != ia + 4; p++)
{
for(auto q = *p; q != *p + 3; q++)
{
cout << *q;
}
cout << std::endl;
}
return 0;
}