A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

二、const关键字介绍及作用

1、什么是const
       const是一个类型修饰符,使用const修饰变量则可以让变量的值不能改变
常量类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的

2、const有什么主要的作用
     1>可以定义const常量,具有不可变形
     2>便于进行类型检查,是编译器对处理内容有更多了解,消除了一些隐患。
     3>可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变!如果想要修改const定义过的内容,只需要:const  int  max=you want;即可
     4>可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错
     5>可以节省空间,避免不必要的内存分配。例如
#define   PI   3.14159       //宏定义
const   doulbe  Pi=3.14159  //此时并未将Pi放入rom中
double  i=Pi;    //此时为Pi分配内存,以后不再分配
double  I=PI; //编译期间进行宏替换,分配内存
double  j=Pi;    //没有内存分配
double  J=PI;   //再进行宏替换,又一次分配内存
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝
     6>提高了效率。编译器通常部位普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高

3、如何使用const
     
    1>修饰一般常量 一般常量是指简单类型的常量。这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。
     比如:
              int  const   x=2;
        或
             const  int    x=2;
     
    2>修饰常数组(值不能够改变了)定义或说明一个常数组可采用如下格式:
     比如:
              int const  a[5]={1,2,3,4,5};
         或
              const  int  a[5]={1,2,3,4,5};

    3>修饰函数的常参数  const修饰符也可以修饰函数的传递参数,格式如下:
         void  fun(const  int  var);
                 告诉编译器var在函数体中的无法改变,从而防止了使用者的一些无意的或错误的修改
   
    4>修饰函数的返回值:const修饰符也可以修饰函数的返回值,是返回值不可被改变,格式如下:
        const   int   fun1();
        const   Myclass  fun2();

    5>修饰常指针
        const   int  *a;
        const 修饰指针, a可变,a指向的值不能被修改

        int   const   *a
        const 修饰指针, a可变,a指向的值不能被修改

下面我们通过实例来看看const的影响
程序如下:

打印输出如下:

说明:
         这是打印了我们定义的两个变量的值;下面我们来改变一下变量的值看看

打印如下:

总结:
         从这个打印图来看可以知道,用const定义过的变量的值是不可以修改的
程序如下:

打印如下:

总结:
         从打印图可以知道,当我们用指针来指向const类型定义的变量时,通过指针可以改变const类型定义的变量的值。值得注意的是,在xcode中是不能实现通过指针可以改变const类型定义的变量的值。这也许是编译器不同造成的差异

下面看看让指针p指向变量b是否可以成功
程序如下:

打印如下:

总结:
         从上图打印我们可以知道,指针p是可以随便指向任何一个变量

下面我们看看由const定义的指针p的情况

打印如下:

总结:
         从打印图可以知道,const类型指针指定指向地址后是不可以再改变地址,但是可以改变指向变量的值


打印如下:

总结:
         从上图可以知道:用const  int  *const  p=&b  定义的指针,既不能改变值也不能改变指针的指向


总结:
         关于const和指针变量的总结
         看const  和   *的位置:

         如果   const  在  *   的左侧      表示指针变量指向的变量的值不能变,但是指向可以改变
        
         如果   const  在  *   的右侧      表示指针变量指向的变量的值可以改变,但是指向不可以改变

         如果   const  出现在  *   的两侧,   表示指针变量的指向和值都不能改变

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马