2015-07-05 67 views
0

爲什麼const char*指向的值由char數組更新,該數組應該只保存應存儲在ROM中的原始字符串文本的副本。const char *仍然修改指向的值

我知道const char*char* constconst char* const的基本理論從這個鏈接const char * const versus const char *?

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 

    char a[] = "ABCD"; 
    char z[] = "WXYZ"; 
    const char* b = a; 
    a[1] = 'N'; // WHY THIS WORKS AND UPDATES THE VALUE IN B.... a should make its own copy of ABCD and update 
       // it to NBCD... b should still point to a read only memory ABCD which can't be changed4 

    //b[1] = 'N'; // THIS FAILS AS DESIRED 
    printf("%s\n", b); // Output -> ANCD 

    return 0; 
} 
+2

程序中沒有數組的副本。賦值不會複製數組。 –

回答

4
const char* b = a; 

const這裏意味着你不能修改什麼指針指向通過b,僅此而已。通過a修改內容仍然是合法的。

1

你錯過了解什麼是簡單的指針。當你寫

const char* b = a; 

它說變量b指向變量a的相同的內存位置。所以無論你在a中所做的改變都會反映在b所指的記憶中。

0

您使b指向const,因此您無法使用b[...]修改b指向的值。但是,您並沒有將a設爲常量指針,您可以修改a[]的內容。

變量b保留您分配的內容。並且您分配了一個指向a數組的第一項的指針。現在b指向存儲a[0]的相同內存位置。修改a數組內容後,您會看到b指向同一位置,現在包含已修改的數據。

0

C只禁止修改用const說明符定義的對象。您的對象a未使用該說明符定義,因此可以進行修改。

雖然確實無法通過b進行修改,但可以通過其他方式進行修改(如a)。