const 注意点(C)

来源:互联网 发布:程序员的电脑屏幕 编辑:程序博客网 时间:2024/05/16 13:47

在阅读完CPP 5th后,看了关于const的介绍,写下这篇文章增强理解。


关于保护数组内容:

   

对形式参量使用const

int sum(const int ar[], int n){     int i;     int total = 0;     for(i = 0; i < n; i++)          total += ar[i];     return total;}

这告诉编译器:函数应当把ar所指向的数组作为包含常量数据的数组对待。如果意外使用了诸如ar[i]++之类的表达式,编译器会发现这个错误,通知用户正在试图修改常量。

这里使用const并不要求原始数组固定不变,只是说明函数在处理数组时,应把数组当作是固定不变的。

也就是说,实际参量是可以改变的,但是当实际参量传给形式参量时,函数保证了处理过程中,实际参量不被修改。



const的基本内容:


类似define,可以用来创建符号常量,但是const还可以创建数组常量,指针常量以及指向常量的指针。

eg: const double PI = 3.14159;



eg:const int ar[];

在随后的程序代码中试图改变数组,将会返回错误。


指向常量的指针不能用于修改数值,如下:

      int rate[3] = {1, 2, 3};

      const int *p = rate;         // p 指向数组开始处,声明为指向 const float 的指针。不能使用 p 来修改它所指向的数值

      *p = 4;            //不允许

      p[2] = 9;         //不允许

      rate[0] = 4;     //允许,因为 rate 不是常量

//特别注意!可以让 p 指向其他地址

      p++;               //让 p 指向 rate[1]  这是合法的



关于指针赋值和 const 的一些规则:


首先,将常量或非常量数据的地址赋给指向常量的指针是合法的:

double rates[5] = {1.22, 2.33, 3.44, 4.55, 5.66};const double locked[4] = {0.01, 0.02, 0.03, 0.04};const double * pc = rates;          //legalpc = locked;                              //legalpc = &rates[3];                         //legal


然而,只有非常量数据的地址才可以赋给普通的指针:

double rates[5] = {1.22, 2.33, 3.44, 4.55, 5.66};const double locked[4] = {0.01, 0.02, 0.03, 0.04};const double * pnc = rates;          //legalpnc = locked;                        //illegalpnc = &rates[3];                     //legal


这样的规则是合理的。否则,用户就可以使用指针来修改被认为是常量的数据。


使用 const 来声明并初始化指针,以保证指针不会指向别处,关键在于 const 的位置:

double rates[5] = {1.22, 2.33, 3.44, 4.55, 5.66};double * const pc = rates;     //p 指向数组的开始处pc = &rate[2];                 //illegal*pc = 99.99;       //legal

这样的指针仍然可以修改数据,但是不能改变指向。



double rates[5] = {1.22, 2.33, 3.44, 4.55, 5.66};const double * const pc = rates;     //p 指向数组的开始处pc = &rate[2];                 //illegal*pc = 99.99;   //illlegal

这个指针既不可以更改所指向的地址,也不可以修改所指向的数据。









































































Computer Programming
Answers wanted • 53m







What are some alternatives to Visual Studio for compiling


























































Computer Programming
Answers wanted • 53m







What are some alternatives to Visual Studio for compiling

0 0
原创粉丝点击