您的位置:首页 > 其它

关于const引用、常量指针、指针常量的一些知识

2015-07-21 22:20 435 查看
    应该将不需要修改的引用形参定义为const引用。普通的非const引用形参在使用时不太灵活。这样的形参既不能用const对象初始化,也不能用字面值或者产生右值的表达式实参初始化,如下所示:int incr(int &val){return ++val;}int main(){short v1=0;const int v2=42;int v3=incr(v1); //v1不是一个整数v3=incr(v2); //v2是一个常量v3=incr(0); //0是一个字面值v3=incr(v1+v2); //相加没有产生左值int v4=incr(v3);//正确}
    理解返回引用至关重要的是:千万不能返回局部变量的引用。当然也千万不能返回指向局部变量的指针。例如:
const string &manip(const string&s){string ret=s;return ret;  //错误,不能返回局部变量的引用。}
    引用和用来初始化引用的变量指向的是同一块内存,因此通过引用或者变量可以改变同一块内存中的内容。引用只是一个别名,是一个变量或对象的替换名字。引用的地址没有任何意义,引用的地址就是它所引用的变量的地址。    指针是地址,指针变量要存储地址值,因此要占用存储空间,我们可以随时修改指针变量所保存的地址值,从而指向其他的内存。    定义引用时没有初始化时错误的,引用一经初始化就始终指向同一特定对象(这就是为什么引用必须在定义的时候初始化的原因)关于指针常量和常量指针的区别int a =3;int b = 1;int c = 2;int const *p1 = &b;//const 在前,定义为常量指针int *const p2 = &c;//*在前,定义为指针常量 常量指针p1:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。   p1 = &a是正确的,但 *p1 = a是错误的。指针常量p2:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。p2= &a是错误的,而*p2 = a 是正确的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: