C语言笔记(四)const


//1.const变量定义的方式

//const 在类型前

const int var = 1OO;

//const在类型后

int const var2 = 999;

//以上两种定义的方式没有区别

//const变量在定义的时候被初始化,当一个变量被const变量意味着该变量是一个常量,

不可修改,换句话说该变量只能做右值,不能做左值

 

 

int * const pp = null;

pp = &z; const在声明的时候初始化,指针不能再指向别的变量,即:value不能改

 

 

1、指向常量的指针,防止通过指针去修改变量的值

   *p= 111;

2、指向常量的指针,该指针可以指向别的变量,指针的value是可以更改。

   cp= &bb;

3.指向常量的指针,不能赋值给一个普通的指针

 int= tempointer = pc;

 

下面一个很好的例子来解释const的用法

#include "stdafx.h"
 
int main(int argc, char* argv[])
{
        
 
   //const 是一个不可改变的变量值
   
         //定义基本类型的const变量,const位置放在哪儿都可以
 
         constint x=2,y=3;   //定义两个常数整数
 
         intz=3; //定义一个非const变量 //初始化一个整型变量
        
         constint *pc=&x;    //定义一个指向常量的指针      //常指针  指针方向不可变,指向一个变量,不能指向其他指针
        
         int* const cp=&z;   //定义一个常指针,值不可以修改的,但是方向不可以变。
 
         //定义一个非const指针
         int*pp=&z;          //普通的指针
  
          z=y;//const 变量只能做右值,而不能做左值
        
   //x=y;  //无法进行转换,x是const变量,所以x的值是不可以更改。const修饰变量不可变
   
    pc= &z;  //OK,pc是一个指向常量的指针,不能通过该指针去修改指针所
                  //指向的内存空间的值,但是,该指针可以指向变量。
 
 
    //  *pc=10; //理由:pc是一个指向常量的指针,不能通过该指针去修改指针所
                  //指向的内存空间的值,但是,该指针可以指向变量。
    
          // *pc=y; 理由:pc是一个指向常量的指针,不能通过该指针去修改指针所
                    //指向的内存空间的值,但是,该指针可以指向变量。
   
          // *pc=5;  理由:pc是一个指向常量的指针,不能通过该指针去修改指针所
                  //指向的内存空间的值,但是,该指针可以指向变量。
 
          
          pc=pp; //pc是一个指向常量的指针,pp是一个普通指针。
                  //用一个普通指针给一个指向常量的指针赋值是可以的。
 
    pp=pc;   //用一个指向常量的指针,赋值给一个普通指针,不可以。
                   //如果可以,那么就可以通过普通的指针去修改内存的值。
   
 
 
          z=5; //给一个非const的变量赋值是可以的。
 
          z=x; //用一个const的变量给一个非const变量赋值也是可以的。
 
          *cp=x; //通过常指针去修改指针指向变量的值,原则上来讲师可以的。
                  //如果指向的变量时const的,那么不同编译会有不同的结果。
 
 
    //cp=&x;     //cp是常指针,指针的值不能被修改。给常指针赋值是错误的。
 
         //pp=&x;   //pp是非const指针,在标准的C语言中是可以给它赋值的。
                     //常指针不能给普通指针赋值
 
         //pp=pc;   //pc是指向常量指针,指向常量的指针不能赋值给一个普通的指针
          pp=cp;     //OK,cp是常指针,常指针可以赋值给一个普通指针。常指针是保护自己的
 
         return0;
}

注:本博文为个人总结,如果有不当之处请指出,本文会有些散乱,请谅解!如需转载,请注明出处。

2012年3月7日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值