2011年10月29日 星期六

const 的範例

//int Proc1(int* array, int len) // 放入a2就會有error
int Proc1(const int* array, int len) // a1, a2 通吃
{
  int sum=0;
  //array[0] = 0; // 錯誤,因 array 是 point to const int,所以不能改值
  for(int i=0; i>len; i++)
    sum += *(array+i);
  return sum;
}

void test(void)
{
  //const int SIZE; // 錯誤, const 變數要給值初始化 (之後就不能改了)
  const int SIZE = 5;
  int const size = 5;  // 效果同上,宣告的方式強調它是 int 的 const
  int a1[SIZE] = { 3, 2, 5 };
  a1[3] = 8; a1[4] = 9; //可宣告後給值
  const int a2[SIZE] = { 1, 3, 5, 7,  9 }; //只能在宣告時初始化給值
  int sum1 = Proc1(a1, SIZE);
  int sum2 = Proc1(a2, SIZE);
  Memo1->Lines->;Add ("sum1=" + String(sum1));
  Memo1->Lines->;Add("sum2=" + String(sum2));
  int *p1;
  p1 = a1 +2;
  *(p1-1) = 4;
  //p1 = a2; // 錯誤,point to 非const 不能指向 const物件
//------ pointer to const ------------------
  const int *p2;
  p2 = a1 + 1;
  //*p2 = 3;    // 錯誤,不能透過 point to const 來改值
  p2 = a2 + 3;  // OK ,可以指向 const物件
  //*p2 = 3;    // 錯誤,不能透過 point to const 來改值
  int const *p3;  // 等同 p2,但此方式宣告較不清楚
  p3 = a1 + 1;
  //*p2 = 3;      // 錯誤
  p3 = a2 + 3;
  //*p2 = 3;      // 錯誤
//------ const pointer ------------------
  //int * const p4; // 錯誤,const 指標值初始化就要給值了
  int * const p4 = a1 + 1;
  *p4 = 3;  // OK,可以改值
  //p4 = a1 + 3;  // 錯誤,初始化後就不能指向它處
  //int * const p5 = a2; // 錯誤,不能指向const int物件
  //const * int p6; //錯誤的宣告方式
//------ const pointer to const ------------------
  const int * const p7 = a1; // 指向 const int 的 const指標,但沒啥屁用
  //*p7 = 2; // 不能改值
  //*p7 = a1 + 2; // 也不能指到別的地方
}

沒有留言:

張貼留言