以下賦值是否有效?或者這些都會造成問題。請建議。常量字符指針賦值
const char * c1;
const char * c2;
const char * c3;
char * c4;
c2 = c1;
c2 = c3;
c2 = c4;
如果我做了以下事情,那該怎麼辦?
const char * c5 = "xyz";
char * c6 = "abc";
c2 = c5;
c2 = c6;
以下賦值是否有效?或者這些都會造成問題。請建議。常量字符指針賦值
const char * c1;
const char * c2;
const char * c3;
char * c4;
c2 = c1;
c2 = c3;
c2 = c4;
如果我做了以下事情,那該怎麼辦?
const char * c5 = "xyz";
char * c6 = "abc";
c2 = c5;
c2 = c6;
所有的聲明都是有效的,因爲所有的指針都沒有被初始化,或者沒有指向任何有效的內存位置。
它們是有效的,因爲指針不是常量,但指針指向的值是常量。所以,這裏的指針可以重新指定爲指向不同的位置。
這些作業都是完全有效的,因爲我和其他人在最近一系列幾乎相同的問題中解釋了這些作業。
A const char*
是無法使用該指針修改的內存指針。這裏沒有什麼可以繞過這一點。編譯器會反對,如果你指定了c4 = c1
,那麼它會繞過const。
在你的腦海中畫一條穿過星號的線。左邊是被指向到什麼類型的指針
的例如
const char * const p
正確的 - 指針p
是恆定的,所以是p
指向字符 - 即不能同時改變指針和內容以什麼p
指向const char * p
- p
指向常量字符。您可以更改p
的值,並讓它指向不同的常量字符。但無論p
指向什麼,您都無法更改內容。char * const p
- 你是無法改變的指針,但可以改變內容最後
char * p
- 一切都是待價而沽希望有所幫助。
你的意思是在第一個例子中有2 * s嗎? –
非常清楚。好貼。我只是想知道爲什麼我可以改變一個'const char * ptr'作爲輸入參數,這一點很好地解釋了。我已經退出了另外40分鐘的選票,所以我會在那之後++。 – stevieb
所有這些都是有效的,唯一有問題的行是char * c6 = "abc";
:這裏「abc」是一個常量字面量,因此將它分配給一個非const指針是不安全的,並且如果不是編譯錯誤,至少應該生成一個警告(我沒有嘗試編譯它)。
@ Kshitij Mehta - 不是作業,我們正面臨着我們龐大的代碼庫的記憶問題。所以請任何幫助,將不勝感激。 – user32262
@user你現在已經問了幾次相同的問題。我們一遍又一遍地回答他們。你對這個問題的編輯不加任何東西。它只是重複你上面提到的問題。 –
我很抱歉,如果我問同樣的事情。也許我對指針的理解並不精確。 – user32262