2015-09-14-数组
数组
数组是类似于vector的低级复合类型。现代C++程序应尽量使用vector类型,只有强调速度时才使用数组。
动态数组创建
T *pt = new T[size];
多维数组
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 value = 1024;
int *pi = &value; //*pi = value,pi = value的地址,&pi= pi指针的地址
C++语言无法检测指针是否未被初始化,因此要避免使用未初始化的指针。
void*指针
void*指针能够保存任意类型对象的地址。
一般不允许使用void*指针操纵它所指向的对象,但是在设计通用接口的时候,若参数列表有指针参数,则可以使用。
指针与引用
前面已经介绍过,引用是指给对象变量另一个名,如A,B,他两的地址与值都是一样的。
而指针则不同,指针变量只是指向对象,他有自己的地址与值,值即指向对象的地址。
数组下标与指针
int ia[] = {1,2,3,4,5};
int *p = &ia[2]; //*p = 3, p = &ia[2]
int j = p[1]; //j = 4 ,p[1] = *(p+1)
int k = p[-2]; //k = 1, p[-2] = *(p-2)
指针是数组的迭代器
指向const对象的指针
指针指向const对象,则不允许通过指针来修改const值,但是可以修改指针所指向的对象(也必须是const对象)。
const T value = x;
const T *ptr = &value;
const int ival = 23;
const int ival2 = 24;
int ival3 = 25;
const int *pi = &ival;
cout<<*pi<<endl;
pi = &ival2;
cout<<*pi<<endl;
pi = &ival3;
cout<<*pi<<endl;
当然“指向const对象的指针”也可以指向非const对象,同样,也不允许通过指针来修改该对象的值,但可以使用其他方法来修改。
const指针
const指针的值不能修改,即被初始化后,就不能指向其他对象,具有“如一性”,但可以修改对象的值。
T val = x;
T *const ptr = &val;
int ival = 23;
int *const pi = &ival;
cout<<*pi<<endl;
*pi = 25;
cout<<ival<<endl;
指向const对象的const指针
明显,这样的指针的限制性更大,即该指针不能修改指向对象的值,也只能始终指向该对象。
(const)T val = x;
const T *const ptr = &val;
如上,如果指向的对象为非const对象,则可以通过其他方法来修改该对象的值。
版权声明:本文为博主原创文章,未经博主允许不得转载。