838
技術社區[雲棲]
【轉自百度知道】關於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