首頁>Club>
24
回覆列表
  • 1 # 使用者834195712159

    1、const的普通用法

    const int n = 10;

    意思很明顯,n是一個只讀變數,程式不可以直接修改其值。這裡還有一個問題需要注意,即如下使用:int a[n];在ANSI C中,這種寫法是錯誤的,因為陣列的大小應該是個常量,而n只是一個變數。

    2、const用於指標

    const int *p;

    int const *p;

    int * const p;

    在最後的一種情況下,指標是隻讀的(即p只讀),而在另外兩種情況下,指標所指向的物件是隻讀的(即*p只讀)。const 是一個左結合的型別修飾符,它與其左側的型別修飾符一起為一個型別修飾符,所以,int const 限定 *p,不限定p。int *const 限定p,不限定*p。const 離誰近,就限定誰。

    這裡有一個簡便的區分方法:沿著*號劃一條線,如果const位於*的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;如果const位於*的右側,const就是修飾指標本身,即指標本身是常量。

    3、const用於函式的地址傳遞引數

    void foo(const int *p);

    這種形式通常用於在陣列形式的引數中模擬傳值呼叫。也就是相當於函式呼叫者聲稱:"我給你一個指向它的指標,但你不能去修改它。"如果函式編寫者遵循了這個約定,那麼就相當於模擬了值傳遞。這也是const最有用之處了:用來限定函式的形參,這樣該函式將不會修改實參指標所指的資料。這裡注意了,是函式不應該去修改而不是不能修改,也就是說const不能阻止引數的修改(原因見上)。

    4、const用於限定函式的返回值

    const int foo();

    const struct mytype foo();

    上述寫法限定函式的返回值不可被更新,當函式返回內部的型別時,已經是一個數值,當然不可被賦值更新,所以,此時const無意義,最好去掉,以免困惑。當函式返回自定義的型別時,這個型別仍然包含可以被賦值的變數成員,所以,此時有意義。

  • 中秋節和大豐收的關聯?
  • 雙黃雞蛋到底能不能吃,是不是變異雞下的蛋?