+ -
当前位置:首页 → 问答吧 → 有关const问题

有关const问题

时间:2011-11-28

来源:互联网

C语言中,为何非const指针可以指向非const变量?

作者: wangyiyan   发布时间: 2011-11-28

又是const,哪个编译器?

作者: wgggkgd   发布时间: 2011-11-28

是const指针为何可以指向非const变量吧?

作者: pqpqr   发布时间: 2011-11-28

要么是指针是const
要么是指针所指变量是const

作者: wizard_tiger   发布时间: 2011-11-28

指针当然可以随便指了,这些都是人为的操作,只不过指错了再去*p会发生段错误而已.
主要有三种情况:const int *p ,指针指向的变量不可被修改,但是指针还是可以变的,意思就是说这个指针指向哪里哪里的内容就不能改了;int * const p, 指针不能被修改,但是指向的内容是可以被修改的。还有一种就是const int *const p;两者都不能被修改,所以基本不用。。。你说的意思应该是“const 指针指向 非const变量“
这显然是第二种情况了哦。不知道这样的回答你是否满意。

作者: flyskylover   发布时间: 2011-11-28

指针和变量不要混淆。。。

作者: pzcwh360   发布时间: 2011-11-28

C语言中,为何非const指针可以指向非const变量? 

可变指针可以指向可变变量,这个有问题?

  // p 可变,p 指向的对象不可变
const int *p;
  // p 可变,p 指向的对象不可变
int const *p;
  // p 不可变,p 指向的对象可变
int *const p;
const int *const p; //指针 p 和 p 指向的对象都不可变

作者: studyCBC   发布时间: 2011-11-28

大家不好意思,我写错了。我描述的是:
非const指针为何可以指向const变量?
应该是非const变量只能指向非const变量吧?

作者: wangyiyan   发布时间: 2011-11-28

如果非const指针变量可以用来const指针变量的话,那么这个const指针变量就可以更改了,这就违背了const指针变量时只读的原理。
但是如果强制转换的话还是可以指向的,例如:char *a,const char *b; a = (char *)b;

作者: w1003025426   发布时间: 2011-11-30

不知道 lz 搞清楚 const 既可以修饰指针,也可以修饰变量

const char *ptr;

char * const ptr;

const char* const ptr;

作者: AnYidan   发布时间: 2011-11-30

不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

作者: zhao4zhong1   发布时间: 2011-11-30

引用 9 楼 anyidan 的回复:

不知道 lz 搞清楚 const 既可以修饰指针,也可以修饰变量

const char *ptr;

char * const ptr;

const char* const ptr;


不错!楼主可以看看C Primer Plus 对这些基本概念说得很细致!!!

作者: chenhonglin000   发布时间: 2011-12-02

这种概念性的东西还是找本书自己看看吧。比如上海贝尔的一本书就不错。网上搜搜就有

作者: zuiweng0615   发布时间: 2011-12-02