数组
定义:在程序设计中,若把具有相同类型的若干变量按有序的形式组织起来,则这些按序排列的同类数据元素的集合称为数组。按数组元素的类型不同,又可分为:数值数组,字符数组,指针数组和结构数据等。
指针
作用:C++拥有在运行时获得变量或对象的地址和通过地址操作数据的能力,而这种能力是通过指针来发挥的。
定义:用来存储数据地址的特殊变量,它本身也是一种类型。(注:指针变量在不致引起混淆的情况下也称指针)。
指针与数组
例:int* p; int a[10];
联系:如上例可以进行p=a;或p=&a[0];对指针变量p初始化,使p指向数组的首个元素,从而a[i]与*(p+i)等价。即:数组名相当于一个指针,表示(存储)数组的首址。
区别:指针是变量,可以进行数值运算.如p++;而数组名是常量.若a++,则错误。
指针数组与数组指针
区别:
指针数组:数组元素均为指针的数组,本质是数组。
例,int* ptrArr[10]; //即数组元素ptrArr[0],ptrArr[1],ptrArr[2]等均为指针。
数组指针:指向数组首元素地址的指针----即指向数组的指针,本质是指针。
例,int(*arrPtr)[10]; //arrPtr为一个int(*)[10]型的指针,指向一个大小为10元素为int型的数组。
下面通过一段程序来说明:
#include<iostream>
usingnamespace std;
int main()
{
char str1[4]={'1','2','3','\0'};
cout<<"str1类型: "<<typeid(str1).name()<<endl;
cout<<"&str1类型: "<<typeid(&str1).name()<<endl;
char str2[2][4]={
{'1','2','3','\0'}
,{'4','5','6','\0'}
};
cout<<"str2类型: "<<typeid(str2).name()<<endl;
cout<<"str2: "<<str2<<endl; //第一个一维数组的首地址
cout<<"str2+1: "<<str2+1<<endl;
cout<<"&str2类型 "<<typeid(&str2).name()<<endl;
cout<<"&str2 "<<&str2<<endl;//整个二维数组的首地址
cout<<"&str2+1 "<<&str2+1<<endl;
cout<<"&str2[0]类型: "<<typeid(&str2[0]).name()<<endl;
cout<<"&str2[0] "<<&str2[0]<<endl;
cout<<"&str2[0]+1 "<<&str2[0]+1<<endl;
cout<<"&str2[0][0]类型"<<typeid(&str2[0][0]).name()<<endl;
cout<<"&str2[0][0] "<<&str2[0][0]<<endl;
cout<<"&str2[0][0]+1 "<<&str2[0][0]+1<<endl;
return 0;
}
