C++数组总结

数组是一种复合类型,声明形如a[x],a是数组名,x是数组维度。

int *parr[10]; //含有10个整形指针的数组 int (*pppp)[10]//数组指针,pppp是指向含有10个int元素的指针 unsigned cnt=42; string bad[cnt]//错误:cnt不是常量表达式 const unsigned sz=42; int *ppp[sz]//正确,sz是常量表达式

字符数组的特殊性
char a1[]={'C','+','+'}; char a2[]={'C','+','+','\0'}; //显示添加空字符 char a3[]="C++"; //自动添加表示字符串结束的空字符 const char a4[6]="xueguofei"; //错误,没有空间可以存放空字符

不允许拷贝和赋值
int a[]={0,1,2}; int a1[]=a; //错误,不允许使用一个数组初始化另一个数组 a2=a; //错误,不能把数组直接赋值给I另外一个数组

指针和数组
string nums[]={"one","two","three"}; string *p=&nums[0]; //p指向nums的第一个元素 string *p2=nums; //等价于string *p2=&nums[0],编译器在遇到数组名的时候会自动将其替换为一个指向数组首元素的指针

【C++数组总结】标准库函数begin和end
int ia[]={0,1,2,3,4,5,6,7,8,9}; int *beg=begin(ia); //指向ia首元素的指针 int *last=end(ia); //指向ia尾元素的下一位置的指针

解引用和指针运算的交互
int ia[]={0,2,4,6,8}; int last=*(ia+4); //把last初始化成8,也就是ia[4]的值 int last=*ia+4; //last=4,等价于ia[0]+4

多维数组
严格来讲,C++语言没有多维数组,所谓多维数组就是数组的数组,对于二维数组,其中一个维度表示数组本身大小,另外一个维度表示其元素的大小,第一维通常称为行,第二维通常称为列
多维数组初始化:
int ia[3][4]={ {0,1,2,3},//第一行 {4,5,6,7},//第二行 {8,9,10,11}//第三行 } //也可以如下 int ia[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

指针和多维数组
int ia[3][4]; int (*p)[4]=ia; //p指向含有4个整数的数组 p=&ia[2]; //p指向ia的尾元素 //使用指针访问多维数组元素 for(auto p=ia; p!=ia+3; ++p) { for(auto q=*p; q!=*p+4; ++q) cout<<*q<


    推荐阅读