2013年8月22日 星期四

C語言指標與 const 的用法

範例 1:
int * const ptr = &x; // ptr 是 constant,*ptr 和 x 不是constant。
int x=10, y=12;
int * const ptr = &x;
//ptr = &y; // 此行會出錯,ptr 是唯讀的,不能重新指派一個新的記憶體位址
*ptr = 50;
x = 60;

printf("*ptr = %d \n", *ptr); // *ptr = 60
printf("x = %d \n", x); // x = 60


範例 2:
const int * ptr = &x; // ptr 不是 constant,*ptr 是 constant,但 x 不是
(也可寫成:int const * ptr = &x;)
我覺得*ptr 是 const,但 x 不是,蠻特別的,也就是不能經由 *ptr 修改 x 的值,但可直接對 x 的值重新指派修改。
如以下範例所示。
int x=10;
const int * ptr = &x; 
// *ptr = 50; // 此行會出錯,*ptr 是唯讀的
x = 60; // 雖然 *ptr 是唯讀,但 x 不是

printf("*ptr = %d \n", *ptr); // *ptr = 60
printf("x = %d \n", x); // x = 60



範例 3:
const int * const ptr = &x; // ptr 是 constant,*ptr 是 constant,但 x 不是
(也可寫成:int const * const ptr = &x;)
int x=10, y=12;
const int * const ptr = &x;
//ptr = &y; // 此行會出錯,ptr 是唯讀的
//*ptr = 50; // 此行會出錯,*ptr 是唯讀的
x = 60;

printf("*ptr = %d \n", *ptr); // *ptr = 60
printf("x = %d \n", x); // x = 60

沒有留言:

張貼留言