转自  http://blog.csdn.net/todd911/article/details/7911995

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只能属于前面的类型。 C++标准规定,const关键字放在类型或变量名之前等价的。

关于char **p 、const char **p的类型相容性问题

1.问题

char *p1;const char*p2=p1;//合法

char **p1;const  char**p2=p1;//不合法,会有警告warning: initialization from incompatible pointer type

char **p1;char const**p2=p1;//不合法,会有警告warning: initialization from incompatible pointer type

char**p1;char*const*p2=p1;//合法

2.判断规则

明确const修饰的对象!对于指针p1,和p2,若要使得p2=p1成立,则可读做 

“p1是指向X类型的指 针,p2是指向“带有const限定”的X类型的指针 “。

char *p1;const char *p2=p1;//合法:p1是指向(char)类型的指针,p2是指向“带有const限定"的(char)类型的指针。

char **p1;const  char**p2=p1;//不合法:p1是指向(char*)类型的指针,p2是指向 ((const char)*)类型的指针。

char **p1;char const**p2=p1;//不合法;与上等价。

char**p1;char*const*p2=p1;//合法:  p1是指向(char *)类型的指针,p2是指向“带有const限定"的(char*)类型的指针。

最后上一个例子:

编译时出现如下错误:
const.c: In function 'main':
const.c:9: error: assignment of read-only location '*a'
const.c:12: error: assignment of read-only variable 'b'
const.c:16: error: assignment of read-only location '*p2'

const char*p,char const*p,char *const p的更多相关文章

  1. error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]”转换为“char *”

    原本打算在QT用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. zajiao zajiao1("AB ...

  2. 【C/C++】字符数组:char,char*,char a[], char *a[], char **s 的区别与联系/const char*和char*的区别

    一.char,char*,char a[], char *a[], char **s 的区别与联系 C语言中的字符串是字符数组,可以像处理普通数组一样处理字符串. 可以理解为在内存中连续存储的字符. ...

  3. VC++2017关于项目出现"const char *" 类型的实参与 "char *" 类型的形参不兼容错误的解决方法

    C++项目中经常会定义如下形式的字符串: char *texts[] = { "1. Open Account", "2. To Deposit Money", ...

  4. 20130324 LBP CSLBP 全局存储区 局部存储区 char c[]=”hello world”和char *str=”hello world”的区别

    1.LBP and CSLBP 2.再论char c[]=”hello world”和char *str=”hello world”的区别 /**************代码1************ ...

  5. 理解extern char s[100]与extern char *s

    在x.c中定义了一个字符数组 char s[100],在l.c中进行引用extern char s[200], 有些c程序新手经常把它写成extern char *s. 这两种写法的含义一样吗? 首先 ...

  6. 【转】int const A::func()和int A::func() const

    int const A::func() { return 0; }int A::func() const { return 0; } 上面的代码是合法的,其中A::func成员函数[只能在成员函数后面 ...

  7. 类的const成员函数,是如何改变const对象的?

    我们知道类里面的const的成员函数一般是不允许改变类对象的,但是我们知道const 类型的指针是可以强制类型转出成非const指针的,同样的道理,this指针也可以被强制类型转换 class Y{ ...

  8. char s[]字串和char *s字串有什麼区别?

    C語言有兩種字串宣告方式char s[]和char *s,兩者有什麼差異呢? Introduction char s[] = "Hello World"; (只是用字符串常量初始化 ...

  9. ES6 js中const,var,let区别 今天第一次遇到const定义的变量

    今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...

  10. C语言char*字符串数组和unsigned char[]数组的相互转换

    #include <iostream> #include <string> using namespace std; void convertUnCharToStr(char* ...

随机推荐

  1. 基于Task的多线程

    /// <summary> /// 基于Task的多线程 /// </summary> public class Tasks { public static void Task ...

  2. Windows 下 mysql 5.7 设置 区分大小写(敏感),设置默认编码 utf8mb4

    修改编码 c盘下搜索 C:\ProgramData\MySQL\MySQL Server 5.7 在该my.ini文件下进行配置修改 [client] default-character-set = ...

  3. Asp.net core中间件实现原理及用法解说

    简述asp.net core中间件的实现思路 原文地址:https://www.cnblogs.com/shengyu-kmust/p/11583974.html 一次http请求的过程,就是对一个R ...

  4. java01_简介_开发环境

    JAVA的前世今生 美国SUN(Stanford University Network)公司,在中国大陆的正式中文名为"太阳计算机系统(中国)有限公司",在中国台湾的正式中文名为& ...

  5. 【OGG 故障处理】OGG-01031

    故障原因 -------------------- 网络异常,导致DP进程异常中断   故障现象 -------------------- 源端DP 进程全部挂起,且启动失败 GGSCI 34> ...

  6. grafana根据不同prometheus server统计数据

    场景:由于采集的数据量巨大,所以部署了多台prometheus server服务器.根据业务领域分片采集,减轻prometheus server单节点的压力. 问题:grafana如何同时显示多数据源 ...

  7. vue 的虚拟 DOM 有什么好处?

    vue 中的虚拟DOM有什么好处?快! 首先了解浏览器显示网页经历的5个过程 1.解析标签,生成元素树(DOM树) 2.解析样式,生成样式树 3.生成元素与样式的关系 4.生成元素的显示坐标 5.显示 ...

  8. sql server 某一列求和

    sql server 某一列求和 SELECT 患者来源,设备类型,检查部位,设备名称,convert(char(10),STUDY_DATE,121) as 日期, count(distinct 就 ...

  9. Cloud Native Weekly |面对云平台宕机,企业如何止损

    KubeEdge v0.2发布 KubeEdge在18年11月24日的上海KubeCon上宣布开源的一个开源项目,旨在依托K8S的容器编排和调度能力,实现云边协同.计算下沉.海量设备的平滑接入. Ku ...

  10. Paper Reading:ION

    Inside-Outside Net (ION) 论文:Inside-Outside Net: Detecting Objects in Context with Skip Pooling and R ...