2014-11-04 110 views
3

實際上,我不知道正常指針和常量指針 之間的區別是什麼,如果我使用下面的代碼,它會正常工作。但是當我將int *ptr=#更改爲int *const ptr = &var1;時,它不起作用。任何人都可以解釋一個普通指針和一個常量指針有什麼不同?正常指針和常量指針在c中的區別

int main(void) 
    { 
     int num = 20; 
    int *ptr = &num ; // if i change to `int *const ptr = &var1;` then it shows some error 

    *ptr = 20 ;    // Valid 
    ptr ++ ;     // valid 

     return 0; 
    } 

回答

5
int* const ptr = &num ; 

將創建一個常量指針爲int。它指向的數據可以改變,但它自己的指針不能。

你不能改變指針:

ptr++ ; 

但你可以改變數據:

*ptr = 1234 ; 
+0

u能告訴我實際上使用const指針的地方 – 2014-11-04 13:07:03

+0

@ArunPrasanth如果你知道指針應該總是指向同一個位置,你可以使它成爲const。 – 2501 2014-11-04 13:07:47

1

此:

int* const ptr = &num ; 

將創建一個常量指針整數。您可以使用它來修改整數值,但不能更改指針指向的位置,因此ptr++ ;無效。

const關鍵字通常應用於其左側的符號,例如,當你想通過周圍的固定存儲位置

int * const ptr; // A constant pointer (*) 
int const * ptr; // A pointer to a constant integer 
int const * const ptr; // A constant pointer to a constant integer 
const int *ptr; // Shorthand for pointer to a constant integer (equivalent to int const * ptr;) 

const指針是有用的,你要確保沒有人會修改指針的尖頭地址。

+1

感謝您的快速回放 – 2014-11-04 13:11:45

1

in c,consttype qualifier。在某些變量定義中使用const表示變量不會在程序的整個生命週期中被修改(將被視爲read-only)。

通常,當定義一個變量/數據類型爲const時,實踐是用所需的值初始化它,通常情況下,它保存的值不能在稍後的部分修改。

例如:

const int a = 10;

裝置,所述整數a將保持值10,它不能被改變。在稍後的部分,

a = 20; 

將產生錯誤。

所以,你的情況

int *const ptr = &var; 

這裏,ptr總會舉辦的var地址,它不能被改變,即我們不能寫

ptr = &num2; // where num2 is another int, declared like int num2; 

它會顯示編譯時錯誤,如:

error:assignment of read-only variable "*ptr".

你可以找到一個很好的和方便的描述here

3

我們可以做地址

  • 印刷價值或解決
  • 在聲明的時間分配地址上不變指針

    • 分配值以下操作。

    我們無法不變指針

    • 添加到整數恆指針下面的操作。
    • 將整數減去常量指針。
    • 任何可以改變指針地址的操作。

    所以,在這裏,你的問題..

    如果聲明

    int* const ptr = &num ; // this is ok 
    

    下一行

    *ptr = 20 ; // Assigning value at address this is ok 
    

    現在,

    ptr ++ ; // you can not change the value // Error! 
    

    希望它有幫助!

  • 1
    int* const pointer = &x ; 
    

    它創建一個指向int的常量指針。數據它指向的是可以改變的,但指針它自身無法改變

    你不能改變指針:

    pointer++ ; 
    

    在這裏你可以改變數據:

    *pointer=1 ;