C++学习之const指针和多维数组

来源:互联网 发布:淘宝店铺标志图片大小 编辑:程序博客网 时间:2024/05/20 19:32

这里的指针和后面讲的多维数组没有任何关系,之所以放在一篇文章中是因为,两个的内容都很少。 

const int *p1;  表示指针p1指向的内容是不可改变的

 int *const p2;  表示指针地址是不可改变的

 const int *const p3;  表示指针的地址和内容都不可改变


有关const定义的量里,不可改变的是顶层const,可改变的是底层const。


const变量作为函数形参:

通常,函数 void  func(const int &i);对于不需要改变的值,我们将它定义为const形式,以保证函数不会改变这个变量。

在函数重载中,void func(const int i);和void func(int i);是不可以重载的,虽然两个函数的参数类型不同,但是当我们用实参初始化形参时,编译器会自动忽略顶层const。也就是说,当形参有顶层const的时候,传给它常量对象和非常量对象都是可以的。而你调用func(int i)时也能传入非常量对象,这时编译器就无法区分你到底是想要调用哪一个func函数了。


注意:可以使用非const对象来初始化一个底层const,但是不能用const对象初始化一个非const对象。如:

int i;

const int &r =  i;

const int *p = &i;

int *q = p;   //wrong !

int  &r1 = r; //wrong !

总之就是不能把一个const变量赋值给一个非const变量!!




多维数组:int  a[3][4],这个好理解,实际上二维数组就是数组组成的数组,在这里a中一共有三个元素,每个元素都是一个长4的数组。

int  aa[10][20][30]表示数组aa有10个元素,每个元素长20,这20个的长度中,每个都有30个元素。这样说不是很清楚,来换一种思想:共有10个父亲节点,这10个父节点均有20个孩子节点,每个孩子节点又都有30个子节点。即用树的概念去理解多维数组。


0 0