如果是const int**的参数,给它传递int**的参数,则编译不能通过,需要进行强制转换。why?
例如:
void fun1(const int* a) {return;}
void fun2(const int** a) {return;}
int main()
{
int a = 5;
int* b = &a;
int** c = &b;
fun1(b); // 可以通过
fun2(c); // 不可以通过
return 0;
}
http://blog.sina.com.cn/s/blog_7cefb1d401012hix.html
http://hi.baidu.com/ken2232/item/2d616df5dabf48ce6225d231
http://bbs.youkuaiyun.com/topics/310007610
是不是const的常量值一定不可以被修改呢?
观察以下一段代码:
const int i=0;
int *p=(int*)&i;
p=100;
通过强制类型转换,将地址赋给变量,再作修改即可以改变const常量值。
3. const修饰指针的情况,见下式:
int b = 500;
const int* a = & [1]
int const *a = & [2]
int* const a = & [3]
const int* const a = & [4]
如果你能区分出上述四种情况,那么,恭喜你,你已经迈出了可喜的一步。不知道,也没关系,我们可以参考《Effective c++》Item21上的做法,如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。因此,[1]和[2]的情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种情况下不允许对内容进行更改操作,如不能*a = 3 ;[3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的;[4]为指针本身和指向的内容均为常量。
http://baike.baidu.com/view/1065598.htm
1)const在前面
const int nValue; //nValue是const
const char *pContent; //*pContent是const, pContent可变
const char* const pContent; //pContent和*pContent都是const
2)const在后面,与上面的声明对等
int const nValue; //nValue是const
char const * pContent; //*pContent是const, pContent可变
char* const pContent; //pContent是const,*pContent可变
char const* const pContent; //pContent和*pContent都是const
答案与分析:
const和指针一起使用是C语言中一个很常见的困惑之处,在实际开发中,特别是在看别人代码的时候,常常会因为这样而不好判断作者的意图,下面讲一下我的判断原则:
const只修饰其后的变量,至于const放在类型前还是类型后并没有区别。如:const int a和int const a都是修饰a为const。*不是一种类型,如果*pType之前是某类型,那么pType是指向该类型的指针
一个简单的判断方法:指针运算符*,是从右到左,那么如:char const * pContent,可以理解为char const (* pContent),即* pContent为const,而pContent则是可变的
http://blog.youkuaiyun.com/Eric_Jo/article/details/4138548
define与const
http://bbs.youkuaiyun.com/topics/310170662
gdb命令
http://www.cnblogs.com/evasnowind/archive/2010/11/07/1871324.html
http://blog.youkuaiyun.com/dadalan/article/details/3758025
C++指针与const用法详解
本文详细解析了C++中指针与const结合使用的各种情况,并通过实例解释了如何正确理解和应用这些概念。文章还探讨了const修饰符在不同位置的意义,以及其对指针操作的影响。

被折叠的 条评论
为什么被折叠?



