陣列在傳入函式或者是在正常使用的情況下,我們可能不希望陣列的數值改變,但是在程式的某個位置我們還是有可能因為疏忽改變了特定陣列的內容。那麼此時我們就需要一種方式來鎖定陣列保證其不發生改變。
我們都知道用const關鍵字可以建立一些常量,使之不能發生改變,那麼陣列也相同,建立const陣列即可:
const
int num[5]
=;
但是如果是在函式呼叫過程中我們不希望改變陣列,但是在其他位置卻希望改變陣列,那麼對應的函式可以寫為:
long
sum(
const
int*a,
int num)
;//傳入陣列首位址和元素個數來計算總值。
因為指標和陣列之間妙不可言的關係,所以在這裡我們也需要討論一下const和指標的問題。
上面的案例中就有函式呼叫時指標和陣列的問題,接下來我們繼續深入:
有const陣列就應該有const指標,首先是3種const指標:(const的位置)
int a[3]
=;const
int*p1 = a;
//不能用於改變量值,但可以改變指向的位置
intconst
*p2 = a;
//不允許改變指向的位置,但是可以修改數值
const
intconst
*p = a;
//不能移動和修改
*(p1+1)
=3;//錯誤a[1
]=3;
//可以
p1++
;p2 =
&a[1];
//不行
*p2 =5;
//可以
p3 =
&a[1];
//不行
*p3 =4;
//不行
而乙個const陣列不可以用普通的指標指向,防止發生資料改變
const
int a[3]
=;const
int*p = a;
//成立
int*x = a;
//不行
最後強調一下,在函式的引數是const陣列的時候,可以傳入乙個const陣列,也可以是普通的陣列,在函式中都當const陣列處理;
而如果是傳入普通陣列的函式,如果傳入const陣列,導致的結果是未定義的(貌似就是什麼鬼情況都可能發生,和編譯器有關,反正就是不對)
const關鍵字用法
1 const常量 如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤 邊際效應 2 const修飾類的資料成員 class a const...
關鍵字const詳解
關鍵字const 1 用關鍵字const定義變數指所定義的常量。即恆定的變數,即不可改變的變數。例 const int i 10 此時 i 就是乙個整型的常量,其值不能改變。在c 中如果用const定義乙個物件,那麼物件中的成員變數就是常數,不能改變 只能為初始化的值 如果用const定義類中的成員...
const關鍵字用法
const修飾符表示該變數的值不能被改變。但得分兩種情況討論 修飾普通變數和修飾指標變數。1.普通常量 const int foo 5 表示foo不能再被賦值 foo 8 錯誤,因為foo是const修飾為不可變常量了 2.修飾指標 const char p test 表示p指向 的記憶體不可改變,...