阅读838 返回首页    go 阿里云 go 技术社区[云栖]


【转自百度知道】关于const int *的解释

这个问题解答了很久的疑惑,很给力的回答,转自百度知道。

const 指针

2011-05-31 19:44过段时间换个ID | 分类:C/C++ | 浏览820次
int a = 40;
const int *pt = &a
这条语句,声明了指针指向的是一个常量,我知道不能通过修改*pt来修改a的值,但是为什么能通过修改a的值来修改*pt?指针指向的不是一个常量吗?
分享到:
2011-05-31 19:47提问者采纳
错:::声明了指针指向的是一个常量.
对:::声明了指针是一个常量.

const int *pt = &a。声明一个指针常量,它固定指向&a。
没说a是常量,常量的是pt他自己的内容,而不是他所指向的空间内容。
追问
const是对int的,不是int * const pt
回答
哦。。你试试改了a后*p变了没
追问
#include <iostream>
using namespace std;
void main()
{
	int a = 40;
	const int * p = &a;
	cout<<*p<<endl;
	a = 50;
	cout<<*p<<endl;
}

...变了。
回答
const(常量)     int     *(指针)     p       -----> P是一个指向常量的指针。你可以改变p指向的地址。如:p   =   &x;     p   =   &y;。但不能改变p指向的值,如*p=100错误 

int   i1=30; 
const   int*     p=&i1; 
可以分别对P和i1赋值,但不能通过p对i1赋值。

int a = 40;
	const int * p = &a;
不能 *p = .....因为指向常量
能 a = .....,因为程序认为a表示变量
追问
是的,但是不能理解。比如*p指向常量40,通过改变a=50,从而使*p = 50,这样还能说p指向常量吗。。明明指向的常量都被改变了
回答
内存的东西又不是你p自己一个人独占的。我a去弄一下自己的空间光你P鸟事。P又不知道。但是P作为一个保守派,是万万不能去弄自己的空间的。
追问
额。这个回答给力多了。我开始也在想,是不是因为a没有定义const,所以a偷偷改变,欺骗隐瞒pt,在C++里这种欺骗也见过好多次了。
回答
要不怎么会有这么多黑客,要不怎么有缓冲区溢出攻击。
函数的返回地址都会被改。
提问者评价
额。。。。感谢。。

最后更新:2017-04-03 05:39:09

  上一篇:go 解决Setting property &#39;source&#39; to &#39;org.eclipse.jst.jee.server的问题
  下一篇:go C++中类成员函数指针详解