博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
const char*, char const* and char *const 分类: ...
阅读量:6252 次
发布时间:2019-06-22

本文共 833 字,大约阅读时间需要 2 分钟。

const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 


事实上这个概念谁都有只是三种声明方式非常相似很容易记混。 

Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 

把一个声明从右向左读。 


char  * const cp; ( * 读成 pointer to ) 
cp is a const pointer to char 

const char * p; 
p is a pointer to const char; 

char const * p; 
同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。 
eg:
下面定义的一个指向字符串的常量指针: 


  char * const prt1 = stringprt1; 


  其中,ptr1是一个常量指针。因此,下面赋值是非法的。 


  ptr1 = stringprt2; 


  而下面的赋值是合法的: 


  *ptr1 = "m"; 


  因为指针ptr1所指向的变量是可以更新的,不可更新的是常量指针ptr1所指的方向(别的字符串)。 


  下面定义了一个指向字符串常量的指针: 


  const * ptr2 = stringprt1; 


  其中,ptr2是一个指向字符串常量的指针。ptr2所指向的字符串不能更新的,而ptr2是可以更新的。因此, 


  *ptr2 = "x"; 


  是非法的,而: 


  ptr2 = stringptr2; 


  是合法的。 


  所以,在使用const修饰指针时,应该注意const的位置。定义一个指向字符串的指针常量和定义一个指向字符串常量的指针时,const修饰符的位置不同,前者const放在*和指针名之间,后者const放在类型说明符前。

转载于:https://www.cnblogs.com/paulweihan/p/4660126.html

你可能感兴趣的文章
字母重排(qsort)
查看>>
Centes7 使用 xshell 登陆
查看>>
TestNG源代码分析:依赖管理的实现
查看>>
VMWare 安装时报错 tools-windows.msi failed报错解决办法
查看>>
java一些面试题
查看>>
如何使用dll和lib
查看>>
js中的ajax
查看>>
求数组的一个最大子数组
查看>>
干货型up主
查看>>
文件与二进制流互转
查看>>
获取页面中所有dropdownlist类型控件
查看>>
【转自ITPUB】SYNONYM关于underlying table权限的小小发现
查看>>
C语言函数参数传递之痛
查看>>
halcon图像合并(贴图到指定位置)
查看>>
stark组件(2):提取公共视图函数、URL分发和设置别名
查看>>
描述符应用 -- 让python变成一个强类型的语言
查看>>
若一个M*N的举证当中某个元素为零,则将其所有的行和列清零。
查看>>
android——使用Interceptor设置缓存来给服务器减负
查看>>
样式独立性的解决方案
查看>>
解决Json的DateTime格式问题
查看>>