“const类型” 的运用,与宏定义(“define”)和(静态变量)“static”的区别(c语言)

const  :定义常变量,将变量变为“只读”——(只能读取、使用数据,不能修改数据);

 定义:

const   变量类型   变量名 = 常量 ;

 作用:

(1)便于检查,消除无意识修改数据的隐患,增强程序健壮性。

如:const int SIZE=10;

     SIZE=20;//编译器就会报错!

(2)避免意义模糊的数字出现,同时可以很方便地对参数调整和修改。同宏定义一样,可以做到“不变一直保持,一 变则都变”。

如:(1)中,想修改SIZE的值,就要写成:const int SIZE=20;

与宏定义(define)比较:可以节省节省空间,避免不必要的内存分配。

如: #define Max1 100 //常量宏

const double Max2=100;    //此时并未将Max2放入RAM中

double de1=Max1;    //编译期间进行宏替换,分配内存

double co1=Max2;   //此时为Pi分配内存,以后不再分配

double de2=Max1;   //在进行宏替换,再次分配内存

double co2=Max2;   //没有分配内存

与静态变量(static)比较:

(1)存储方式不同:

    const定义的常量在超出其作用域之后其空间会被释放,const变量的值不能修改;而static定义的静态常量在函数执行后不会释放其存储空间,static变量的值可以修改。

(2)static多用于修饰函数,规定此变量这能在该模块(文件)使用。

用法:

(1)数据类型(int、char....)对于const而言是透明的。(const修饰它的直接右边,不能做左值)

     如:(const int SIZE =10;)等同于(int const SIZE =10;)

    (const int * p=&a;)等同于(int const *p=&a;)

(2)const 与指针。(权限可以同等或者缩小传递,但不能放大传递)
      如:int a=10;
  1. const int *p1=&a;    //只读*p1,将p1的解引用“锁死”
  2. int const *p2=&a;    //只读*p2,将p2的解引用“锁死”(等同于1.)
  3. int *const p3=&a;   //只读p3,将p3的值“锁死”
  4. const int const *p4=&a; // 只读*p4,将p4的解引用“锁死”(等同1.2.)
  5. const int * const p5=&a;   //只读p5和*p5,将p5的值、p5的解引用都“锁死”
  6. int const *const p6=&a;   //只读p6和*p6,将p6的值、p6的解引用都“锁死”(等同5.)


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页