《c专家编程》笔记--深入理解const char*p,char const*p,char *const p
来源:互联网 发布:网上书店管理系统sql 编辑:程序博客网 时间:2024/05/21 17:03
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 *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'
- 《c专家编程》笔记--深入理解const char*p,char const*p,char *const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- max no of gateways exceeded
- Android基础之单线程模型中Message、Handler、Message Queue、Looper之间的关系
- 将一张表的查询结果插入到另一张表
- 关于青春
- IBM java面试题
- 《c专家编程》笔记--深入理解const char*p,char const*p,char *const p
- C++11(及现代C++风格)和快速迭代式开发
- 若爱 就如桃花般地去爱
- linux sed用法
- android 系统编译_要点记录
- 邂逅在华灯初上
- zf中Zend_Db_Table_Row的save()方法 更新
- asp.net下载文件的四种方法
- jquery+ajax 根据输入生成用户名并检测用户重名