关于常量修饰符 const

原文地址为: 关于常量修饰符 const

      一直对const的理解就是简单的常量修饰符,定义一个不可改变的变量【注意这里是变量,也就是说const叫常量修饰符,但实际上它定义的是一个变量,只不过由编译器限定未不可修改】。

        后来听了老师的课发现const有许多有意思的用法:

        1:const int i = 10; --> i的值不可改变,若i = 11;则报错

        2:const int *j = (int*)&i; 和 int const *j = (int*)&i; --> j指向的变量的内容不可变,若 *j = 20; 则报错

        3:int * const t = (int*)&i; --> t指向的地址不能改变,若t++; 则报错

        老师给出的建议是看const前面是什么,那么那部分就不可修改,比如int const i = 5; const 前是int, 则表示i的值不能被修改

                                                                                                                                  int const * j; const 前也是int, 则表示i指向的变量的值不能被修改

                                                                                                                                  而int * const j; const 前是int *,表示指针指向的值不能被修改


        还有一个有意思的大家可以自己试一下,这个我还不知道是什么原因,

const in a = 10;
int *p = (int*)&a;
int *j = (int*)&a;

cout << *p << " " << a << " " << *j << endl;
cout << p << " " << &a << " " << j << endl;
*p = 20;
cout << *p << " " << a << " " << *j << endl;
cout << p << " " << &a << " " << j << endl;

上面这段代码的结果很有意思,执行完*p = 20;后,*p和*j都变为20,但是a还是10。与此同时可以看到p和j指向的地址和a的地址是相同的。

扫描二维码关注公众号,回复: 1805674 查看本文章



在别人的博客里找到了答案

http://blog.chinaunix.net/uid-26853826-id-3365403.html

const全局变量存储在全局存储空间,其值只有可读属性,不能修改;

const局部变量存储在堆栈中,可通过指针修改其值;

const变量在预处理是处理,编译器只对其值读取一次。



转载请注明本文地址: 关于常量修饰符 const

猜你喜欢

转载自blog.csdn.net/kkwant/article/details/80867667