0 Replies Latest reply on Aug 23, 2011 7:19 PM by wensenyuan

    [资料转发分享]C语言中的const关键字

    Brown Belt

      以前对C语言还真是一知半解(现在也差不多,比以前好点了),最近专注于研究C语言,这篇文章是我在学习const的体会。

       

      const从表面意思上将就是常量的意思,但是在嵌入式系统中,声明一个变量为const,如const int statusR ;并不意味着这个变量的值不可改变,一个例子是硬件模块的只读状态寄存器。所以,如果你回答const代表着常量或者不变,那就说明你并没有完全理解const的意思。

       

      const的意思可以大概解释为“只读”,也就是说我们不可以人为地改变定义为const的变量的值,例如,定义const int count = 8 ;若在程序中出现重新定义该count变量的时候,编译器将会给出错误。

       

      关于const 的用法,更加经典的而令人怀念的是下面几条语句的区别:

      (1)const int count ;

      (2)int const count ;

      (3)const int* ptr ;

      (4)int* const ptr ;

      (5)const int* const ptr ;

      面试时被问到这几条语句有什么区别,并加以解释,如果答不出来,你是不会被录用为嵌入式系统程序员的。下面对这几条语句加以解释:

      (1)和(2)的const的效果是一样的,它声明了一个int 型变量count ,没有实质上的区别;

      (3)条语句的意思是定义一个int型指针ptr,该指针指向一个int型的常变量。也就是说ptr指向的变量的值是不可以变化的,而ptr本身的取值是可以变化的,也即可以指向不同的int型变量。

      (4)条语句的意思是定义一个int型的常指针ptr,该指针指向一个int型变量。也就是说ptr指向的变量的值是可以改变的,而ptr本身不可以改变,也即ptr一旦被捆绑在一个变量上,它就不能指向另外一个int型变量。

      (5)条语句的意思是定义一个int型的常指针ptr,该指针指向一个int型常变量。意思是说,不管是指针本身,还是指针指向的变量,当把两者捆绑在一起之后,两者都不能改变(ptr不能指向另外一个int型变量,ptr指向的变量的值不可改变)。

       

      以上是小弟的学习体会,希望可以帮助你们理解const。

      如有错误的地方,欢迎您们指出,我会很高兴的。