1樓:
僅僅說對了一部分。
1、的確,在絕大多數場合,指標是「變化的位址」。
我們開拓一下思路:
「變化的位址」的反義——是「不變化的位址」,對嗎? 沿這個思路,想一想,指標是否可能是「不變化的位址」?
int * const p;
指標p能變化嗎?
2樓:
我認為,不一定;
指標不僅負責儲存乙個位址,還負責儲存,它能管轄的記憶體範圍;例如:
int*Ar=
(int*)
calloc(16
,sizeof
(int));
//...
free(Ar
);這裡的 Ar,不僅儲存了一段連續的記憶體的首位址,還儲存了這段記憶體的長度;
否則,後面的 free() 函式,怎麼知道,該釋放多大的記憶體呢?
而且,有些指標,是不可以變化的,例如:
const
char
*Str=;
這裡的 Str,就儲存了乙個,不可以變化的位址,後面的字串,就從這個位置開始儲存,直到遇到第乙個 '\0' 字元為止;
注意,我們可以,對之前的 Ar 重新賦值,但不能對這裡的 Str 賦值,即使賦相同的值也不行;
free(Ar
);Ar=(
int*
)calloc(32
,sizeof
(int));
// 編譯到這,暫時沒問題;
Str=
Str;
// 編譯到這裡,會出錯的;
3樓:巐歌
指標就是乙個儲存位址值的變數。
既然是儲存的是位址值,那麼用其位址值就能檢索到記憶體對應位址的內容。
既然是變數,其值可變,也就是裡面儲存的位址值可變,用來指向不同的位址。
既然是變數,那麼本身就要占用記憶體位置,也就是本身位置也有位址。
在 C 語言中指標的歷史是怎樣的?
Crazyjin 型別 變數和變數的值本來就是三個概念 一直都是三個概念。int是型別,int a 申明了乙個int型別的變數a。pointer是型別,pointer variable是pointer型別的變數。只不過這裡pointer和pointer variable沒有指明具體型別。這裡舉個具體...
C 語言中指標陣列和陣列指標 函式指標 指向函式的指標等等該怎麼理解?
ga6840 direct declarator IDENTIFIER declarator direct declarator direct declarator assignment expr direct declarator declarator direct declarator poin...
c語言中指標指向的非指標變數不能使用 或 嗎
大灰灰老師 學術概念上不太正確 關於 unary 的定義 但實際上是對的解釋 C語言中,所有 unary operator 單目運算子,優先順序都是有著 left to right associativity 的比 right to left 的高,即放在被操作量右邊的先算。例如 p 先算右邊的 s...