const 的 双指针类型
来源:互联网 发布:护甲套淘宝 编辑:程序博客网 时间:2024/06/08 02:08
前几天改别人的代码用到了双指针,而且双指针前面加了const,顿时就蒙了。
const BaseDescMod** _DESCMODS = new BaseDescMod* [globalConfig->mPtsNum*4];
双指针的在分配内存时就出现问题了:
error C2440: “初始化”: 无法从“stasm::BaseDescMod **”转换为“const stasm::BaseDescMod **”
参阅了http://blog.csdn.net/g5dsk/article/details/7188468关于双指针加入const前缀的解释,算是明白了一些,
这里的** _DESCMODS是const BaseDescMod型,即指双指针指向的内容是常量,不可改变。
* _DESCMODS是 const BaseDescMod * 型,即 (* _DESCMODS) 这个指针的指向可以改变,但是其地址的内容不可改变。
所以在这样的双指针分配内存时,* _DESCMODS 在new 时,就应该写成如下形式:
const BaseDescMod** _DESCMODS = new const BaseDescMod* [globalConfig->mPtsNum*4];
即编译通过了。
另,指针常量和常量指针一直搞混淆,也得理一下。
char *str1={"Hello"};
1、指针常量:即指针本身是常量, 如:
char * const str2 = str1;
指针指向不可改变,但是地址内容却可以改变。
2、常量指针:即指向常量的指针,如:
const char * str3 = str1;
指针指向可改变,但是其地址内容却不可改变。
这两种方法很容易晕掉,看到网上有一种说法:const在什么的右边,就是用来修饰什么。在char右边,即修饰char类型,即指向内容不可变;在*右边,即修改指针,即指针批向内容不可变。
返回到最初的
const BaseDescMod** _DESCMODS
因为 const 修饰的是*,所以自然有:
const BaseDescMod** _DESCMODS = new const BaseDescMod* [globalConfig->mPtsNum*4];
按这种顺序,我可以再加一句,以便能够准确说清楚它们的名字,const记为常量,*记为指针:
const char *,即常量指针;
char * const,即指针常量;
- const 的 双指针类型
- const”类型的指针“
- const指针和指向const类型的指针
- const指针与指向const类型的指针
- const类型的指针是否可变问题
- const与指针类型
- 指向const对象的const指针 typedef 理解复杂的const类型的声明
- 关于const指针和指向const类型的指针的问题
- C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)
- C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)
- 强制转换const类型指针
- C++ const 和指针类型
- 指针与const限定符的类型识别
- 为什么要用this指针,为什么是const类型的
- 两种与const相关的指针类型
- 指向const对象的指针&&&const指针
- 指向const对象的指针 const指针
- 指向const的指针和const指针
- Linux操作系统下三种配置环境变量的方法
- 高精度整数加法
- hadoop深入研究:(八)——codec
- android eclipse 程序调试及相关快捷键
- Linux内核分析 - 网络[七]:NetFilter
- const 的 双指针类型
- Design cross devices web sites
- 更新Ubuntu时报错。 原因是相应的KEY有问题
- hadoop深入研究:(九)——mapreduce中的压缩
- 【tp-link路由器默认用户名与密码 】
- Linux内核-进程内核栈、用户栈
- C#基于Surfer开发
- CSS实现完美垂直居中
- hadoop深入研究:(十)——序列化与Writable接口