const用法大全

作者:计算机知识

const几点用法
2005年 01月08日
面向对象是C 的重大本性.

       那能够说是C和C 中很根基的文化了,却也是超级轻易出错的知识,对于定义常量,未有什么样极其,可是对于定义常量指针,没犯过不当的人估摸非常少。
       众人周知,被const修饰过的符号的值是爱莫能助改观的,被称作常量,比如“const int a = 50;”,但还可能有一种写法是“int const a = 50;”,const的职位不相同了,实际上,这两条语句的意义是千篇生机勃勃律的,都是将a定义为整型常量。但若将其用来指针中,const的任务不一样,意义也就不一样。
       如const int *pa与int* const pa,具体看示例。
int main(int argc, char *argv[])
{
        const int a;
        int b;
        const int *pa = &a;
        pa = &b;                            //准确写法,const int *pa能够改过pa的值,可是无计可施修正*pa的值
        *pa = 70;                            //错误,const int *pa指向const int类型,不可能改革*pa的值
        b = 70;
        printf("%d", *pa);              //打印70,*pa不能改良,不过b能够更改,虽说指向同大器晚成内存地址,然则访问方式分裂
        int* const pb;                   //错误,常量指针未有伊始化
        int* const pb = &a;         //正确
        pb = &b;                          //错误,常量指针的值不能够修正
        *pb = 20;                         //正确,虽说a是常量,但*pb不是常量,如若将来想强行纠正某常量的值,能够照猫画虎此法
        const int* const pc = &b;           //不经常见到的写法,不过这种写法是准确的,从地点的几条注释就足以猜出来了,const int* const pc不能修正*pc的值,也不可以更正pc的值
        reuturn 0;
}

const int a 表示a是三个整形常量,能够理解为修饰int
int const a 表示a是三个整形常量,能够精通为修饰int
int* const a 表示a是一个常指针,指针地点无法校正,可以驾驭为修饰*
const int* a 表示a指针必得指向八个整形常量,指针地点能够改造,能够领略为修饰int
int const *const用法大全。 a 表示a指针必需指向多个整形常量,指针地点能够退换,能够了然为修饰int
const int* const a 表示a是多少个常指针,指针指向二个整形常量,能够精晓为修饰int和*

过生龙活虎段时间不看,就记不清楚了。在这里记录一下

可是c 在c的底子上新增的几点优化也是很灿烂的

规律:
在int 左右的const都是修饰它的
在*左边的const才是修饰它的

int a1=3;   ///non-const data
const int a2=a1;    ///const data
int * a3 = &a1;   ///non-const data,non-const pointer
const int * a4 = &a1;   ///const data,non-const pointer
int * const a5 = &a1;   ///non-const data,const pointer
int const * const a6 = &a1;   ///const data,const pointer
const int * const a7 = &a1;   ///const data,const pointer

就const直接能够代表c中的#define

补充:常引用
const string& a
或者
string const & a
只顾:string &const a这种写法是不没有错
常引用时:援引的内容不能够修改。
有人会问,援引不改善的措施是怎么?答案是引用本来就是不行校订的。对援用赋值其实是改动了引用的变量的值。
不胜枚举库中函数参数为啥日常是常引用呢?原因是将常引用实参传递给援引类型的型参加会议报错,而将引用类型的实参传递给常引用类型的型参不会报错。

以下几点十分重大,学不佳后果也也很要紧

后续补充:常数组
const int a[3]
或者
int const a[3]
代表数组内容不能够改进。
实际上数组头指针本来就不可能改换进而这种场地是头指针和数组内容都无法被改造。

const

  1. 节制符注解变量只可以被读
       const int i=5;
       int j=0;
       ...
       i=j;   //违规,引致编译错误
       j=i;   //合法
  2. 总得最初化
       const int i=5;    //合法
       const int j;      //违规,招致编写翻译错误
  3. 在另意气风发一而再一而再再而三文件中援引const常量
       extern const int i;     //合法
       extern const int j=10;  //非法,常量不得以被重新赋值
  4. 方便进行项目检查
       用const方法能够使编写翻译器对管理内容有更加多通晓。
       #define I=10
       const long &i=10;   /*dapingguo提示:由于编写翻译器的优化,使
          得在const long i=10; 时i不被分配内部存款和储蓄器,而是已10一贯代入
          今后的引用中,以致在之后的代码中绝非不当,为达到规定的标准说教效
          果,极度地用&i显然地交给了i的内部存储器分配。可是借使您关闭所
          有优化措施,即使const long i=10;也会挑起前面的编写翻译错误。*/
       char h=I;      //没有错
       char h=i;      //编写翻译警示,可能出于数的截短带来错误赋值。
  5. 能够免止没有必要的内部存款和储蓄器分配
       #define STRING "abcdefghijklmn "
       const char string[]="abcdefghijklm ";
       ...
       printf(ST奥迪Q5ING);   //为STPRADOING分配了第叁遍内部存款和储蓄器
       printf(string);   //为string三次分配了内存,今后不再分配
       ...
       printf(STLANDING);   //为ST奥德赛ING分配了第叁回内部存款和储蓄器
       printf(string);
       ...
       由于const定义常量从汇编的角度来看,只是给出了对应的内部存款和储蓄器地址,
       并不是象#define相同付出的是立即数,所以,const定义的常量在
       程序运转进度中唯有大器晚成份拷贝,而#define定义的常量在内存中有
       若干个拷贝。
  6. 能够透过函数对常量实行早先化
       int value();
       const int i=value();
       dapingguo说:假定对ROM编写程序时,由于目的代码的不行改写,
       本语句将会不得要领,可是能够生成一下:
       const int &i=value();
       只要令i的地点处于ROM之外,就可以兑现:i通过函数伊始化,而其
       值有不会被修正。
  7. 是还是不是const的常量值一定不得以被改善呢?
       观望以下大器晚成段代码:
       const int i=0;
       int *p=(int*)&i;//这里不可不有强制类型转变
       *p=100;
       通过强制类型转换,将地点赋给变量,再作纠正即能够改革const常量值。
  8. 请分清数值常量和指针常量,以投注明颇为玩味:
       int ii=0;
       const int i=0;            //i是常量,i的值不会被改换
       const int *p1i=&i;        //指针p1i所指内容是常量,能够不开端化
       int  * const p2i=ⅈ     //指针p2i是常量,所指内容可校勘
       const int * const p3i=&i; //指针p3i是常量,所指内容也是常量
       p1i=ⅈ                  //合法
       *p2i=100;                 //合法

本文由bwin必赢发布,转载请注明来源

关键词: 日记本 565net网站 c/c++笔记