定义和初始化数组
int a[5]; //定义数组是基本形式
int a[]={1,2,3}; //可以在定义时,直接初始化
int a[5]={1,2,3} //定义时初始化数组,如果指定了数组大小,那么提供初始化的元素的个数只可以比数组指定的个数少,本可以多,没有初始化的位置,会默认初始化,
对于字符数组,我们要记住一定要留一个位置存放结束符‘\0’,而且数组是不允许拷贝赋值的。数组的元素应为对象,因此不存在引用的数组
理解复杂的数组声明
- 数组的指针或数组的引用
- 存放指针的数组,没有存放引用的数组。
#include<iostream>
using namespace std;
int main()
{
int num[5] = { 1,2,3,4,5 };
int(*num_pointer)[5] = # // 数组的指针
/*
num_pointer ⇒ &num 表示一个数组的首地址, 步长为一个整个数组大小
*num_pointer => num 表示数组第一个元素地址, 步长为一个数组元素的大小。
**/
cout << "num的值:" << num<<endl;
cout << "&num的值:"<<&num << endl;
cout << num_pointer << " " << *num_pointer << endl;
cout << **num_pointer << " " << *((*num_pointer) + 1) << endl;
int (&num_quote)[5] = num; //数组的引用
cout << num_quote[0] << endl;
char* str[2] = {"Hello", "world"}; // 存放指针的数组
cout << str[0] << endl;
system("pause");
return 0;
}
输出结果:
指针和数组
使用数组的时候,编译器一般会把它转换成为指针。在一些情况下对数组的操作,其实就是对指针的操作。
int num[5] = { 1,2,3,4,5 };
auto num1 = num; //num存放的是数组的第一个元素的地址,所以num1的类型是一个指针
cout << "num1的类型是:" << typeid(num1).name() << endl;
输出结果:
数组地址获取
- begin函数获取数组的首地址
- end函数获取数组尾元素的下一个地址
下标和指针
内置的下标运算符所用的索引值是有符号数, 这一点和vector 和 string 不一样。下标和指针关系如下:
a[i] == > *(a + i)