C语言查漏补缺,const

  

<强>一,const的作用
const修饰的变量,变成了一个不可修改的常量,比如
<代码> int c=0; 这个时候,c是可以修改的,但是加上const以后,c的值就变成常量,
<代码> const int c=0;> =2,那么程序就会报错。
这就是常量的主要作用,但是,在c语言中,<强> const修饰的变量真的就是一个常量吗?

  

<强>二,const的“bug"
我们看下面这段代码

  
 <代码> int main ()
  {
  const int cim_test=1;
  
  printf (" cim_test=% d \ n”, cim_test);
  
  int * p1=, cim_test;
  
  * p1=3;
  printf (" cim_test=% d \ n”, cim_test);
  
  返回0;
  } 
  
 <代码>这段代码,运行结果如下 
  

 C语言查漏补缺——const”> <br/>不是说好的const修饰的变量是一个常量吗?常量是什么,就是初始化以后,直到程序结束,值都不会改变的量。为什么这里被改变了呢? </p>
  <p> <强>三,const的几种情况</强> <br/>在回答上面的问题之前,我们先考虑const会出现的几种情况,<br/> 1, const修饰静态局部变量<br/> 2, const修饰全局变量<br/> 3, const修饰局部变量</p>
  <p>第一种情况,这个时候的局部变量受到静态的影响更大,因此,存储在只读存储区上,无法进行修改。<br/> <强>第二种情况,这个时候的就要看编译器了,如果是早期的编译器,比如BCC这种的话,变量是存储在全局数据区,而如果先一些现代c编译器的话,那么,编译器会优化,将其存储于只读存储区。</强> <br/>第三种情况,这是比较常见的,这种时候,变量是存储在栈上的,因此,我们可以通过<强>指针指向这段内存,然后修改这个值</强>。</p>
  <p>因此,得出结论====在<强>在C语言中,const修饰的变量,并不完全是常量。</强> </p>
  <p>下面是测试代码</p>
  <pre> <代码> # include & lt; stdio.h>
  
  const int cig_test=2;
  
  int main ()
  {
  const int cim_test=1;
  const静态int cism_test=3;
  
  printf (   

<强>四,const的扩展
我们可以利用常量的这个属性来规范一些代码编写。
1, const修饰的函数参数,在函数内部不允许修改。
2, const修饰的函数返回值,表示函数的返回值不可以修改
# include & lt; stdio.h>

  
 <代码> const char * f (const int i)
  {
  我=5;//错误,const变量不能作为左值
  
  返回“Hello World”;//返回指向只读存储区的指针
  }
  
  int main ()
  {
  char *电脑=f (0);//华林
  
  printf (" % s \ n ", pc);
  
  电脑[6]=' _ ';//错误,不能修改只读存储区的内容
  
  printf (" % s \ n ", pc);
  
  返回0;
  } 

C语言查漏补缺,const