當 const 放在型態前面時, 表示該變數不可更動內容外,也不能用等號去設定新值. 但如果放在型態後面, 像是宣告指標常數, 雖然不能更動內容, 但卻是可以修正指標指向新的位置, 參考以下範例:
// a.c
#include <stdio.h>
int main(){
int a = 10;// a 是變數, 設定為整數 10
int b[5];// b 是 5 個整數的陣列, 內容未初始化,全是亂數, 但實際上 b 是常數, 指向 一個陣列
const int c =3; // c 是整數的常數 3
int const *d; // d 是指標常數,型態 *d 是整數, 不能改變, 但 d 指標是可以更動的.
int* const &e = b; // e 是陣列 b 本身的指標, e 是常數不能變, 但 e[0], ... 是可以更動的
d = &c; // ok, 把 d 指向 c
printf("a=%d\n", a);
printf("b[0]=%d\n", b[0]);
printf("c=%d\n", c);
printf("*d=%d\n\n", *d);
a =5;
d = &a; // ok, 把 d 指向 a
e[0]=3; // ok
printf("a=%d\n", a);
printf("b[0]=%d\n", b[0]);
printf("c=%d\n", c);
printf("*d=%d\n", *d);
// c =22; // error , c is constant
// *d = 1; // error, *d is a constant
// e =d; // error
}
編譯並執行: g++ a.c && ./a.out
a=10
b[0]=785709024
c=3
*d=3
a=5
b[0]=3
c=3
*d=5
沒有留言:
張貼留言