这里的指针和后面讲的多维数组没有任何关系,之所以放在一篇文章中是因为,两个的内容都很少。
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个子节点。即用树的概念去理解多维数组。
本文介绍了C++中的const指针,包括const int *p1、int *const p2和const int *const p3的含义。重点讨论了const变量作为函数形参时的作用以及编译器如何处理顶层const。此外,还讲解了多维数组的概念,通过比喻将二维及多维数组理解为树状结构。

9665

被折叠的 条评论
为什么被折叠?



