試著想看看下面的程式碼是否合法?
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) - 基礎測驗解答篇
沒有留言:
張貼留言