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;
输出结果:
内置的下标运算符所用的索引值是有符号数, 这一点和vector 和 string 不一样。下标和指针关系如下:
a[i] == > *(a + i)