【转自百度知道】关于const int *的解释
这个问题解答了很久的疑惑,很给力的回答,转自百度知道。
const 指针
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