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对象,则可以通过其他方法来修改该对象的值。

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-10-02 00:16  mlhy  阅读(98)  评论(0)    收藏  举报