指针与const限定符

原文:http://www.cnblogs.com/Dezhong-chen/p/4734516.html

const型变量

如果在程序中需要经常使用某一常量,可以使用编译预处理命令定义符号常量。

eg:#define PI 3.14159

const型变量也是一种定义常量的手段。const型变量是特殊的变量,程序运行过程中不可改变,其他特性和变量一样。定义const变量时必须初始化。

eg:

const int Max=1000; //int和const位置可以交换。

const常量与符号常量的区别:

1)符号常量由预编译器处理,const型变量由变量处理。

2)在编译时符号常量已经不存在了,而const常量依然存在。

3)符号常量的作用域从定义位置开始,到源文件结束,而const型变量和一般变量一样。

指向const对象的指针

其指向的对象是const的,不能被修改,但是其本身并不是const的,可以修改其指向的地址。

声明方式为:

    const int *p; 

[cpp]  view plain  copy
  1. const int* a;  
  2. void tes()  
  3. {  
  4.     int c=2;  
  5.     a=&c;  
  6. }  
    此代码是正确的,先声明了一个指向const对象的指针,然后在tes函数中将其指向c变量。
[cpp]  view plain  copy
  1. const int* a;  
  2. void tes()  
  3. {  
  4.     int c=2;  
  5.     a=&c;  
  6.     *a=4;  
  7. }  
    此编码编译错误。

t.cpp: In function 'void tes()':
t.cpp:6:5: error: assignment of read-only location '* a'

    因为a所指向的对象是const的,不能修改。


注意:不能将一个const对象的地址赋给一个指向非const对象的指针;但可以将一个非const对象的地址赋给一个指向const对象指针;


const指针

此指针指向的地址是不能够改变的,但是其指向的对象是可以被修改的,其定义类似:

    int* const p=地址;

    比如下面的代码:

[cpp]  view plain  copy
  1. int b=12;  
  2. intconst a=&b;  
  3. void tes()  
  4. {  
  5.     *a=1;  
  6. }  
    此代码是正确的,先声明了变量b,然后声明一个const指针a,此指针指向变量b,在tes函数中修改指针a所指向的对象的值。

    如果将代码修改为:

    

[cpp]  view plain  copy
  1. int b=12;  
  2. intconst a=&b;  
  3. void tes()  
  4. {  
  5.     int c=2;  
  6.     a=&c;  
  7. }  
    再编译就会出错:

t.cpp: In function 'void tes()':
t.cpp:6:5: error: assignment of read-only variable 'a'

因为指针a是const的,不能被重新赋值。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值