转自  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*)类型的指针。

最后上一个例子:

#include <stdio.h>
int main(void){  int v1 = 1;  int v2 = 2;    int const *a = &v1;  *a = 2;    int *const b = &v2;  b = &v1;   char**p1;  char*const*p2=p1;  *p2 = &v1;  return 0;
}  

编译时出现如下错误:
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'

转载于:https://www.cnblogs.com/QingCHOW/p/4603223.html

const char*p,char const*p,char *const p相关推荐

  1. int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”

    问题描述: [cpp] view plaincopy //定义了三个编辑框控件 接受num1 num2 num3 void CTestDlg::OnBnClickedButton1()   //响应按 ...

  2. “const char *“ 类型的实参与 “char *“ 类型的形参不兼容错误的解决方法

    "const char *" 类型的实参与 "char *" 类型的形参不兼容错误的解决方法 参考文章: (1)"const char *" ...

  3. 关于VS2022 C++报错 const char* 类型的实参与char *类型的形参不兼容解决办法

    关于VS2022 C++报错 const char* 类型的实参与char *类型的形参不兼容解决办法 问题来源 错误原因 解决方案 问题来源 在学习写C++代码时候,去练习课本上课后习题时候的问题, ...

  4. C语言编译时产生的警告:initializing ‘char *‘ with an expression of type ‘const char *‘ discards qualifiers

    警告的产生: char *my_strstr(const char *str1,const char *str2) {const char *s1 = NULL;const char *s2 = NU ...

  5. getch()与_getch()、不能将const char*类型的值分配到const* 类型的实体

    参考1:getch()与_getch() 添加预处理 项目 -> 属性 -> 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> 编辑中添加:_C ...

  6. const char * 类型的实参与 char * 类型的形参不兼容_4 种 C++ 强制类型转换,你都清楚吗?...

    我们先来回忆以下,C 语言的强制类型转换形式: (type) expr; 这种旧式强制类型转换从表现形式上来说不够清晰明了,容易看漏,一旦转换过程出现问题,追踪起来也就更加困难. 为了解决以上问题,C ...

  7. c语言中char * string,浅析string 与char* char[]之间的转换

    1.首先必须了解,string可以被看成是以字符为元素的一种容器.字符构成序列(字符串).有时候在字符序列中进行遍历,标准的string类提供了STL容器接口.具有一些成员函数比如begin().en ...

  8. arduino int转char_将char *转换为int arduino(Convert char* to int arduino)

    将char *转换为int arduino(Convert char* to int arduino) 我有问题从char获取int值..这里 Serial.println(((char *)&quo ...

  9. 类与对象:类的6个默认成员函数: 构造函数、析构函数、拷贝构造函数、赋值操作符重载、默认拷贝构造与赋值运算符重载的问题、const成员函数、 取地址及const取地址操作符重载

    1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类.任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数. 构造函数 析构函数 拷贝构造函数 赋值操作符重载 const成员函数 ...

  10. c语言tchar转char,CString、TCHAR*、char*转换

    CString->TCHAR*的转化可以用函数GetBuff() 函数原型为:LPTSTR GetBuffer( int nMinBufLength ); CString str("C ...

最新文章

  1. pythonrequest爬取小说,pythonrequest爬取小说_python爬取斗破苍穹小说
  2. 人脸识别是怎么识别的?为什么需要大数据?(原理篇)
  3. maven(3)------maven构建web项目详细步骤
  4. eclipse 设置PythonIDE
  5. JSP标准标签库(JSTL)--简介
  6. 2017-9-17pat甲级 A
  7. Java中的数据库架构导航
  8. mysql设计一个简单的系统_一个简单数据库设计例子
  9. 使用express、react、webpack打包、socket.io、mongodb、ant.design、less、es6实现聊天室
  10. 美的集团:已耗资4.86亿元回购847.4万股
  11. c语言程序设计实践教程编程题8.3,C语言程序设计教程(21世纪计算机科学与技术实践型教程)...
  12. Linux---僵尸进程的解决办法
  13. 图像分割(一):K-means聚类算法
  14. mysql能管理多大的硬盘,Mysql----查看数据库,表占用磁盘大小
  15. Android Clipboard(复制/剪贴板)
  16. select和epoll
  17. Win7 64位操作系统连接HP 1010打印机完美解决方案
  18. 图片干扰背景处理,简单易懂
  19. 为什么要学习凸优化?
  20. Beta的计划和人员的变动

热门文章

  1. java分布式_分布式锁的四种JAVA实现方式
  2. x61 linux 驱动 无线网卡,Linux环境Thinkpad X61 4G内存Mtrr表错误
  3. python发送邮件并返回提示_用python3的smtplib库发邮件一直返回无法发送邮件提示,是什么原因?...
  4. nodejs mysql save_NodeJs Mysql简易操作工具
  5. deepdive连接mysql数据库_如何从Error Code获取Message
  6. android 检查 write_external_storage,android – 如何知道何时需要WRITE_EXTERNAL_STORAGE
  7. signature php今日头条,今日头条_signature 求解
  8. java 类型 转换 valueOf和parse...
  9. 协程 eventlet
  10. TensorFlow CTC