2011-10-11 120 views
1

我們可以給另一個指定一個const char *並修改該值嗎?const char指針修改

const char * c1; 
const char * c2 = c1; 

上述分配是否有效?

+0

我將問題轉回原來的形式。你添加的內容被你的後續問題所覆蓋:http://stackoverflow.com/questions/7736049/const-char-pointer-assignments –

回答

2

const char*表示該字符串的內容是不變的。你可以有不同的指針指向相同的常量內存。換句話說,指針是具有相同值的不同變量。請記住,指針的值是它引用的內存的地址。

所以,是的,上面的任務是完全有效的。


我不知道這個問題是否與你的previous question有關。你在這裏說:

我們可以將一個爲const char *到另一個修改的價值?

如果通過「修改值」的意思是修改字符串的內容(這是你想要在上一個問題中做的),那麼你不能。在這裏給出的例子中,你有兩個指針指向相同的常量內存塊。如果其中一個指針不能修改那個內存,那麼另一個指針也不能修改。

0

是的,它是完全有效的。

A const char *表示指針指向的內容是常量,但它不會停止將指針指定給另一個指針,因爲這不會更改原始指針所指向的內容。

這給你兩個指針指向相同的內存位置。

|----------|         
    | c1  |        
    |   | 1000      
    | 2000 |        
    |----------|        
      |           
      | 
      | 
      | 
      -------------------->|----------| 
           | num | 
      -------------------->|   | 2000 
      |     | 2  |  
      |     |----------| 
      | 
      | 
    |----------|        
    | c2  |        
    |   | 3000      
    | 2000 |        
    |----------|  

你能砍周圍和修改const char *指針的內容,但請注意,修改聲明爲未定義行爲常量結果的變量。

1

const char*表示指向的字符串是常量。

char const*表示指針本身是常量。

0

您已經知道,但值得重複的是:const限定符是編譯器的指令。它與運行時間想要做的任何事情沒有任何關係。 const的含義是:「嘿,編譯器先生:當我發現我修改這個變量時,請告訴我,我不是這個意思。」 AFAIK,編譯器在看到這種自毀性用法時會發出警告。我想你可能會讓編譯器在這種情況下發出一個平坦的錯誤。