C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)
来源:互联网 发布:mac显示flash版本过低 编辑:程序博客网 时间:2024/05/18 19:47
void func(const int ** arg){} int main(int argc, char **argv){ int **p; func(p); return 0;}
这个代码用gcc编译会出现这样的错误:
main.cpp: 在函数‘int main(int, char**)’中:
main.cpp:8:8: 错误: 从类型‘int**’到类型‘const int**’的转换无效 [-fpermissive]
main.cpp:1:6: 错误: 初始化‘void func(const int**)’的实参 1 [-fpermissive]
make: *** [main.o] 错误 1
这是因为
const int ** p1; // int元素不可修改int * const * p2; // int *一级指针不可修改int ** const p3; // int **二级指针不可修改
形参const int **是说int元素不可以修改,而你如果传一个int **类型的参数,那么你也可以通过修改int *一级指针来修改int元素。
这样和你的预期就会不一致,这是很危险的行为。
那么如何解决:
void func(const int * const* arg)这样就ok了。你也可以这样:
typedef const int * INTP; void func(const INTP * arg) // const修饰的是INTP,一级指针不可修改{} int main(int argc, char **argv){ int **p; func(p); return 0;}
0 1
- C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)
- C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)
- 从const int *, int const *, int * const 及const int * const到指针常量、常量指针
- 从const int *p、int* const p到this指针的const属性分析
- C类型转换:error C2664:不能将参数 从“int”转换为“const char *”
- 从int 到string类型的转换
- TFS安装:base_packet.cpp:246: 错误:从类型‘const char*’到类型‘pthread_t’的转换无效
- C语言中int到float的强制类型转换
- C语言中int到float的强制类型转换
- int *const 和 int const*的区别 (指针 和 const)
- const int& | int const& | const int* | int const* | int *const | const int *const的区分
- 漫谈C指针第六讲---从 const int i 说起
- const指针,const int * p, int *const p,int const * p的区别
- [c#]从数据库中用ExecuteScalar()读取值使用(int)强制类型转换发生System.InvalidCastException: 指定的转换无效
- VC中int,char,char*,const char*,string等类型转换
- VC中int,char,char*,const char*,string等类型转换
- VC中int,char,char*,const char*,string等类型转换(转载)
- const”类型的指针“
- linux SSH互信配置详解
- 【慕课笔记】2-2 遍历目录
- Android开发艺术探索读后感-part1
- [leetcode Q50] Pow(x, n)
- AngularJS 入门3
- C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)
- Java编程学习小技巧
- 标签中id和name的区别
- hadoop之IOUtils是否需要关闭流?
- 文件I/O编程
- 2016蓝桥杯假期任务之《01背包 》
- Spring+Mybatis整合(3)- SSM(六)
- 项目3:小试循环---(2)求1到m间所有奇数的和
- ZOJ3603 2012浙江省赛D