浅谈const

来源:互联网 发布:淘宝一折特卖 - 百度 编辑:程序博客网 时间:2024/04/30 23:13

      今天在看《C专家编程》的过程中,发现以前自己对const一直存在误解,一直以为声明变量用了const,差不多久就变成常量了,今天仔细斟酌了一下,终于知道自己理解错了,到底还是菜鸟啊,哈哈。

      我个人感觉const还是比较容易混淆,关键字const并不能把变量变成常量,在一个符号前加上const限定符只是表示这个符号不能被赋值,也就是它的值对于这个符号来说是只读的。

      要说明const不是真正表示常量,这很容易,比如:

const int two=2;

switch(i){

  case 1 : printf("case 1/n");break;

  case two : printf("case 2/n");break;

  case 3 : printf("case 3/n");break;

  default : printf("default/n");break;

}

当i为2的时候,上面的代码在case two那行将产生一个"case expression not constant"的编译错误,这并不是switch语句本身的过错,但这条switch语句展示了const其实并不是真正的常量。

      const可以用再数据上,如:const int limit=10;   这个很常见,当你在等式两边加上指针,对我这样的小菜就有点难度了:

#include <stdio.h>
int main()
{
 int i = 10,n=8;
 const int *p = &i;
 printf("%d/n",*p);

 i=6;                       //i的值对于const是只读的,但是它可以通过程序的内部(甚至是外部)的方法来修改这个值

 printf("%d/n",*p);

 p=&n;                   //指针本身的值是可以改变的
 printf("%d/n",*p);
 return 0;
}

上面这段代码表示p是一个指向常量整型的指针。这个指针不能用于修改这个整型数,但是在任何时候,这个指针本身的值是可以改变的。这样,它就指向了不同的地址。const仅说明,你不能通过改指针修改它指向的值。并不能说明它指向的这个变量不能在其他地方修改。

原创粉丝点击