注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

I choose

sailing with my heart ......

 
 
 

日志

 
 

C中const修饰变量  

2010-03-18 22:14:47|  分类: 语言学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在VC++对C语言的实现中,const修饰的变量只是编译级的保护,而未做到运行时的“只读”保护。测试代码如下:
 
#include<stdio.h>

void main(void)

{

 const int a = 1; //整型符号常量

 int const b = 2; //同上

 const int *c = &a; //指向常整型的指针,不能对“*c”赋值

 int * const d = &b; //指向整型的常指针,不能对“d”赋值

 int const * const e = &b; //指向常整型的常指针,不能对“e”和“*e”赋值

 //总结const在int的前和后没有区别,但是在“*”的前和后是有区别的

 //const常量必须在声明并赋值,否则将被定义成默认初值并且不能被修改


 //同样的道理在字符串常量中,不能对str[]进行赋值

 const char str[] = "abcd";

 //但是,在VC++中以上这些都是编译级的保护,也就是由编

 //译器来保证不通过符号修改变量的值,而实际运行的时候

 //确不能保护实际内存中的值不被改变,下面我们就来尝试

 //一下通过指针来改变const变量的值。

 //

 //但是实际上,在程序中是存在真正的“常量”的,也就是

 //存储在只读数据段(".rodata")的变量,但是什么样的数据

 //会被但到只读数据段呢,貌似不同的编译器会采取不同的

 //做法,VC++则将单独的字符串常量,放到只读数据段。

 //如:char *str = "abcd";

 //像上面这样的字符串是不能修改的。

 int *pa, *pb;

 char *pstr;

 //a=2;

 pa = &a;

 *pa = 2;

 printf("%d\n",a); //2


 //b=3;

 pb = &b;

 *pb = 3;

 printf("%d\n",b); //3


 //*c=3;

 c = &b;

 printf("%d\n",*c); //3


 //d=&a;

 *d = 1;

 printf("%d\n",*d); //1


 //*e=5;

 //e=&a;

 printf("%d\n",*e); //1


 //str[1]='g'

 pstr = str + 1;

 *pstr = 'g';

 printf("%s\n",str); //agcd

}
工具软件下载请到馒头软件:http://www.mantoo.com.cn
  评论这张
 
阅读(162)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017