閱讀838 返回首頁    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++中類成員函數指針詳解