const & define

C++指针与const用法详解
本文详细解析了C++中指针与const结合使用的各种情况,并通过实例解释了如何正确理解和应用这些概念。文章还探讨了const修饰符在不同位置的意义,以及其对指针操作的影响。
一个函数的形参为指向常量的指针,比如:const int*,给它传递int*的参数,编译是可以通过的,不需强制转换。
如果是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



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值