const 修饰的变量真的不能改吗?
来源:互联网 发布:安卓版windows模拟器 编辑:程序博客网 时间:2024/05/17 23:19
我们在学校学习C的时候,我们的老师经常都会跟我们说:如果一个变量用了const来修饰的话,我们就不能改变这个变量的值。
但是事实是这样吗??当然不是。。。。。在C专家编程里面有提到,用const来修饰的变量如果已经初始话了,就不能再给这个
变量直接赋值,但是我们可以用到其他的方法来改变它的值。只要不用这个变量来赋值就可以啦,那么我们就会想到,我直接利
用它的地址来修改。下面就是我的代码:
#include<stdio.h>void test(const char *p){ char **point; char b[]="world"; printf("%s\n",p); point=(char **)&p; *point=b; printf("%s\n",p);}void main(int argc,char **argv){ const int i=6; int *pointer; pointer=(int *)&i; *pointer=5; printf("%d\n",*pointer); printf("%d\n",i); char a[]="hello"; test(a); }
输出的结果是
这个到底是为什么第一个输出结果是5,但是第二个输出结果就是6呢??难道是内存里面的数值又变回去啦??其实里面的内存没有变回去,
只是用数值输出的时候,const修饰的变量I已经跟初始话的数值挂钩了,输出的时候不用访问内存,直接替换。但是字符窜输出的时候因为要
从变量中寻找数组地址,所以后面2次用P输出,但是会不同的原因啦!
为了证明这个我写了一个代码:
#include<stdio.h>void test(const long p){ long *point;char b[]="world";printf("%ld\n",p);point=(long *)&p;*point=(long)b;printf("%ld\n",p);}void main(int argc,char **argv){char a[]="hello";test((long)(&a));}
结果是:
这是本人第一次发博客,水平有限,请多多指教,有错的请指教
- const 修饰的变量真的不能改吗?
- const变量真的不能修改吗?
- const变量真的不能改变吗?
- const修饰的变量
- const 修饰的只读变量
- 修改const修饰的变量
- const修饰变量的总结
- extern,static,const修饰变量的用法
- 修改C中const修饰的变量
- const 修饰变量赋值的时刻
- mutable 修改const修饰过的变量
- 关于 static const修饰的变量
- c++中const变量真的不可以修改吗?
- c++中const变量真的不可以修改吗?
- c++中const变量真的不可以修改吗?
- c++中const变量真的不可以修改吗?
- 不一样的C语言-const修饰的变量
- 【C++】用const修饰变量与define的区别
- css防止图片过大撑破盒子 兼容 ie6、 ie7、 ie8、 ff
- android的一些常用手机信息获取
- android launchMode
- ORACLE函数 字符类函数
- HDU_Steps 6.1 生成树 HDU1102 HDU1162 HDU1232 HDU1233 HDU1879 HDU1301 HDU3371 HDU3367
- const 修饰的变量真的不能改吗?
- Android获取已安装应用信息(图标,名称,版本号,包)
- 火韦强烈推荐:240多个jQuery插件
- Log Parser Version 2.2.10 提示帮助
- MVC学习笔记--1
- Flashback Database!
- 几种asp.net文件下载实现方式
- Oracle语法之OVER
- 编程技术面试的五大要点 文/何海涛