• C语言学习及应用笔记之三:C语言const关键字及其使用


      在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图。

      事实上,无论我们是使用const关键字声明变量还是声明参数,其目的都是为了告诉使用者这个变量或者参数的应用目的。合理地使用关键字const 可以使编译器有效地保护那些不希望被改变的变量或参数,防止其无意中被代码修改。所以使用const关键字可以避免一些不必要的错误。

      我们已经说明了const关键字的作用,接下来我们将更进一步讨论const关键字使用:

    1const关键字修饰的变量

       const关键字最常见的用法就是修饰变量,使用const关键字修饰的变量可以认为有只读属性。如:

      const int a=10;

      int b=0;

      b=a;  (I)这条语句是正确的

      a=b;  (II)这条语句是错误的,编译错误,因为a具有只读属性

      虽然const关键字修饰的变量具有只读属性,但绝不能将它简单的等价于常量。事实上C语言的const关键字修饰的变量仅是语法上的常量。

      此外,使用const关键字修饰的变量,在声明时必须进行初始化。这是显而易见的,既然是只读的,当然就得有一可供兑取的明确的值,而不是不确定的。例如:

      const int a=10;    //合法用法

      const int a;      //非法,导致编译错误

      另外需要注意的是,使用const关键字定义的变量是全局性的。所以在使用的时候需要注意。

      通常使用define定义一个宏,如:#define PI 3.1415976,以后无论在哪里需要使用圆周率时,我们直接使用PI即可,而在编译时预处理器会将所有的PI替换为3.1415976。这很方便,但是由于编译器不会对其进行检查,如果使用不慎就会引入错误,而且此种错误很难发现。而且,我们也无法得到PI的地址,不能向PI传递指针或引用。

      为此,我们常使用const关键字修饰的变量来代替宏。使用const声明的变量虽然增加了分配空间,但是可以保证类型安全,并且可以得到其指针。const消除了预处理器的值替代的不良影响,并且提供了良好的类型检查形式和安全性,所以理解了const关键字,对我们的编程是有很大的帮助的。

    2const关键字修饰的指针变量

      const关键字除了用来修饰普通变量外,还经常用来修饰指针变量。当然,在讨论之前,我们需要搞清楚两个概念:常量指针和指向常量的指针。所谓常量指针就是指针变量的值一旦初始化就不能改变,所以必须初始化。而所谓指向常量的指针就是其指向的值是一个常量的指针。

      在声明指针变量时,const关键字所处的位置,决定了其定义的指针变量的含义,例如我们定义:

      (a)int * const p; 该语句表示指向整形的常量指针 ,它不能在指向别的变量,但指向(变量)的值可以修改。

      (b)const int * p; 该语句表示指向整形常量 的指针,它指向的值不能修改。

      (c)int const * p; 该语句与b的含义相同,表示指向整形常量 的指针,它指向的值不能修改。

      (d)const int *const p; 该语句表示指向整形常量 的常量指针 。它既不能再指向别的常量,指向的值也不能修改。

      (e)int const *const p; 该语句与d的含义相同,表示指向整形常量 的常量指针 。它既不能再指向别的常量,指向的值也不能修改。

      这写定义容易让人糊涂,但有一点技巧可以帮助我们理解。就是看const关键字的右边跟着的是什么?当const关键字的右边是类型时,则表示值是常量;当const关键字的右边是指针变量,则表示指针本身是常量。

    3const关键字修饰的函数形参

      const关键字也经常用来修饰函数的形参。关键字const修饰函数形参时,通常用于参数为指针或引用的情况,且只能修饰输入参数。若输入参数采用“值传递”方式,由于函数将自动产生临时变量用于复制该参数,该参数本就不需要保护,所以不用const修饰。

      const关键字修饰函数输入参数的形式如:void function(const  int * a ); 或者void function(const  int & a);都是可以的。在C标准库中就很多这样的应用,例如字符串处理函数:

      字符串拷贝函数:char *strcpychar *strDestconst char *strSrc);

      返回字符串长度函数:int strlenconst char *str);

      以上两个函数就是将源字符串使用const关键字保护起来,防止不注意的修改改变了源字符串的值。

      佷显然,采用const关键字修饰函数形参,就是为了保护输入参数。在调用函数的时候,用相应的变量初始化const常量,则在函数体中,按照const所修饰的部分进行常量化,如形参为const int * a,则不能对传递进来的指针所指向的内容进行改变,保护了原指针所指向的内容;如形参为const int & a,则不能对传递进来的引用对象进行改变,保护了原对象的属性。

    4const关键字修饰的函数返回值

      const关键字有时候也会用来修饰函数的返回值,这种情况一般是用来修饰返回的指针或引用,保护指针指向的内容或引用的内容不被修改。例如:

      const char * function(void);

      这种用法比较少见,在此仅提及一下。

      综上所述,const关键字不但强大,而且对我们的编程确实有很大的帮助,前提是我们真正的理解了它的用法。

    欢迎关注:

  • 相关阅读:
    PaaS 7层动态路由的若干实现
    05-OC对象的内存分析
    04-类与对象的练习(第二个OC的类)
    03-类的声明和实现(第一个OC的类)
    02-类与对象的关系
    01-面向对象和面向过程
    06-BOOL类型的使用
    05-初识OC多文件编程(第4个OC程序)
    04-初识OC多文件编程(第3个OC程序)
    03-第二个OC程序
  • 原文地址:https://www.cnblogs.com/foxclever/p/9826499.html
Copyright © 2020-2023  润新知