const的使用
来源:互联网 发布:泽野螳螂 知乎 编辑:程序博客网 时间:2024/05/29 08:01
话说有这么一道辨别题(如下),指出这三者的区别。
①char const *p;
②const char *p;
③char *const p;
const,表示只读,不可被改写。这三者都带有const,想区别它们,很简单,只需要看看变量名(也就是上面的P)
离*比较近还是const比较近,如果离*比较近的话,那么说明该变量是一个指向常量的指针,该指针的内容是可改
变的(即可改变指针指向的内存区域),比如上面的①和②,表示p是一个指向常量的指针,该指针p是可以指向其
它区域的,比如给p赋新的值:p = buff;(buff是一个数组名)。
而如果指针变量名离const比较近的话,那就不一样了,它表示该指针是一个常量指针,即该指针只能在声明的时候
被赋初值,而不能声明之后,再给指针赋值,那样子编译的时候,会报错(提示该指针是只读指针,不能被改写)。
当然,该指针所指向的区域的内容是可被改写的,如上面的③,表示p是一个常量指针,若对其进行以下声明:
char *const p = buff;(buff是一个数组名)
那么p不能再赋任何其他值,但对于buff则可以随意修改其内容。
总结:
归根到底,这三者,只有两种情况(①和②是一样的):
一个是指针所指向的区域的内容不能被改写,为只读,但指针能够修改指向的区域;
一个是指针所指向的区域不能被改写,为只读,该该指针所指向的区域的内容能够被改写。
①char const *p;
②const char *p;
③char *const p;
const,表示只读,不可被改写。这三者都带有const,想区别它们,很简单,只需要看看变量名(也就是上面的P)
离*比较近还是const比较近,如果离*比较近的话,那么说明该变量是一个指向常量的指针,该指针的内容是可改
变的(即可改变指针指向的内存区域),比如上面的①和②,表示p是一个指向常量的指针,该指针p是可以指向其
它区域的,比如给p赋新的值:p = buff;(buff是一个数组名)。
而如果指针变量名离const比较近的话,那就不一样了,它表示该指针是一个常量指针,即该指针只能在声明的时候
被赋初值,而不能声明之后,再给指针赋值,那样子编译的时候,会报错(提示该指针是只读指针,不能被改写)。
当然,该指针所指向的区域的内容是可被改写的,如上面的③,表示p是一个常量指针,若对其进行以下声明:
char *const p = buff;(buff是一个数组名)
那么p不能再赋任何其他值,但对于buff则可以随意修改其内容。
总结:
归根到底,这三者,只有两种情况(①和②是一样的):
一个是指针所指向的区域的内容不能被改写,为只读,但指针能够修改指向的区域;
一个是指针所指向的区域不能被改写,为只读,该该指针所指向的区域的内容能够被改写。
0 0
- const的使用,const char * const foo(char const * const str) const;什么意思?
- Const 的使用
- const的使用
- const的使用
- Const的使用
- 关于const的使用
- const的使用
- const volatile的使用
- const 的使用
- const的使用
- 使用const的好处
- Const 的使用
- const关键字的使用
- const的使用
- const的使用
- const 的使用
- 使用Const的理由
- const的使用
- C++实现堆排序并记录编程中遇到的一个bug(不要对无符号整形数在--的循环中采用>=0作为结束条件)
- linux下静默安装oracle11g
- 单元测试入门
- 数据查重去重,数据匹配过程
- DTS结构及其编译方法
- const的使用
- 《2017,有你们真好》
- JavaScript数组学习笔记(json、arguments、数组、字符串)
- <Oday安全 11.6利用加载模块之外的地址绕过SafeSEH>一节注记---jmp [ebp+N] (上)
- Android第十一课;相对布局
- JavaServer Faces 2.0 requires Dynamic Web Module 2.5 or newer..Maven Java EE Configuration
- 2017.1.9--linux下的C语言--目录与文件
- 微信小程序开发前奏
- 人工智能-未来