【转自百度知道】关于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++里这种欺骗也见过好多次了。
回答
要不怎么会有这么多黑客,要不怎么有缓冲区溢出攻击。
函数的返回地址都会被改。
提问者评价
额。。。。感谢。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值