const 续写

来源:互联网 发布:嘉靖 知乎 编辑:程序博客网 时间:2024/04/29 14:41

杰哥,我翻译了一段,可不可以拿出来看看 李俊杰(2006)(411421510) 21:00:39 没事的。什么都可以 2008杨元超(1374843422) 21:00:43 /*const意味着something是不能被改变的,所以在程序运行的过程中,一个被const限制了的数据对象是一定不能被赋值的,不管以何种方式。通常情况下用const限定来声明一个变量时都会有一个变量的初始化(否则,既然你不能给这个变量赋值,那么这个变量怎么得到一个值呢?),但情况不总是这样的。例如你将要访问一个确定的内存地址空间的内容,并且保证只读不写,那么这个’内容‘就可以用const来限定,并且不用初始化*/ /*把一个非const变量的地址放到一个const指针(当然这里指针所指向的数据类型与前面的变量是相同的)里既安全,而且显然是允许的。而用强制类型转换来把const变量的地址放到一个指向非const变量的指针里是很危险的*/ /*下面是一个简单的例子*/ #include #include void main() { int i; const int ci = 123; /*声明一个指向const变量的指针*/ const int *cpi; /*声明一个指向非const变量的指针*/ int *ncpi; cpi = &ci;//这是允许的 ncpi = &i; ncpi = (int *)cpi;//这需要一个强制类型转换 *ncpi = 0; exit(EXIT_SUCCESS); }

 

这是刚讨论CONST到底修饰谁,我做了个测试 ,大家 看下也思考下
2008杨元超(1374843422) 21:35:24
#include<stdio.h>
main()
{
int i = 1;
int *p;
/*以下eg2表示改变指针的情形    eg1表示改变指针所指对象的情形

const int *p1 = &i;
/*eg1
*p1 = 2;
//error: assignment of read-only location ‘*p1’
*/
/*eg2
p1 = p;
//true
*/
int const *p2 = &i;
/*eg1:
*p2 = 2;
//编译结果:error: assignment of read-only location ‘*p2’
*/

/*eg2
p2 = p;
//编译结果:true
*/

int *const p3 = &i;
/*eg1:
*p3 = 2;
//编译结果:true
*/

/*eg2:
p3 = p;
//编译结果error: assignment of read-only variable ‘p3’
*/
const int *const p4;
/*eg1:
*p4 = 2;
//编译结果:error: assignment of read-only location ‘*p4’
*/
/*eg2:
p4 = p;
//编译结果 error:assignment of read-only variable ‘p4’
*/
}
原创粉丝点击