2013年11月10日 星期日

const 的使用 (3) - 基礎測驗篇

上一篇: const 的使用 (2) - 指標篇
試著想看看下面的程式碼是否合法?
int a = 5, b = 6;
const int c = 7, d = 8;
int *             p1 = &a; // 編譯成功或失敗?
int * const       p2 = &a; // 編譯成功或失敗?
const int *       p3 = &a; // 編譯成功或失敗?
const int * const p4 = &a; // 編譯成功或失敗?
int *             p5 = &c; // 編譯成功或失敗?
int * const       p6 = &c; // 編譯成功或失敗?
const int *       p7 = &c; // 編譯成功或失敗?
const int * const p8 = &c; // 編譯成功或失敗?
int *             p9;      // 編譯成功或失敗?
int * const       p10;     // 編譯成功或失敗?
const int *       p11;     // 編譯成功或失敗?
const int * const p12;     // 編譯成功或失敗?

賦值運算:

a = 15;                    // 編譯成功或失敗?
c = 20;                    // 編譯成功或失敗?
p1 = &b;                   // 編譯成功或失敗?
p2 = &b;                   // 編譯成功或失敗? 
p3 = &b;                   // 編譯成功或失敗?
p4 = &b;                   // 編譯成功或失敗?
p1 = &d;                   // 編譯成功或失敗?
p2 = &d;                   // 編譯成功或失敗? 
p3 = &d;                   // 編譯成功或失敗?
p4 = &d;                   // 編譯成功或失敗?
*p1 = a;                   // 編譯成功或失敗?
*p2 = a;                   // 編譯成功或失敗? 
*p3 = a;                   // 編譯成功或失敗?
*p4 = a;                   // 編譯成功或失敗?
*p1 = c;                   // 編譯成功或失敗?
*p2 = c;                   // 編譯成功或失敗? 
*p3 = c;                   // 編譯成功或失敗?
*p4 = c;                   // 編譯成功或失敗?

【補充】遇到巢狀的指標時,又會發生什麼事情?

int **p13;
int ** const              p14 = p13; // 編譯成功或失敗?
int * const *             p15 = p13; // 編譯成功或失敗?
const int **              p16 = p13; // 編譯成功或失敗?
int * const * const       p17 = p13; // 編譯成功或失敗?
const int ** const        p18 = p13; // 編譯成功或失敗?
const int * const *       p19 = p13; // 編譯成功或失敗?
const int * const * const p20 = p13; // 編譯成功或失敗?

下一篇: const 的使用 (4) - 基礎測驗解答篇

沒有留言: