C++關於數組與指針一些值得注意的筆記

   數組

顯式初始化的數組不需要制定數組的維數值;

   int arr[] = {0,1,2};  //[]中維數值可以省略

②vector使用vector::size_type作爲下標的類型,數組下標類型是size_t;

int main()

{

   const size_t array_size = 7;

   int ia1[] = {0,1,2,3,4,5,6};

   int ia2[array_size];                 //使用size_t類型數值來定義數組大小

   for (size_t ix = 0; ix != array_size; ++ix)            //從ia1複製數據到 ia2

            ia2[ix] = ia1[ix];

   return 0;

}

   指針

①指針相減用標準庫類型ptrdiff_t(signed整型)數據儲存(在cstddef頭文件中定義)

  #include<cstddef>

  int ia[] = {0, 2, 4, 6, 8};

  int *ip = ia;            

  int *ip2 = ip + 4;

  ptrdiff_t n = ip2 - ip1;

  //這個數值爲signed整型數據,表示位置關係

 

②指針下標

  int *p = &a[2];

  於是   p[1] == *(p + 1)     //相當於a[3] 

          p[-2] == *(p - 2)     //相當於a[0]

 

③指向const 對象的指針

 指向const對象的指針必須具有const特性(即使木有,也默認有了)

  const double pi = 3.14;

  double pi2 = 2.7;

  double *ptr = &pi;   //錯誤,pi具有const特性

  const double *cptr = &pi;      //ok,

  const double *cptr2 = &pi2;    //ok,但不能通過*cptr2修改pi2的值.

 PS:這種指針可以更改指向,不可更改所指向的值.

 

④const指針

 具有const特性的指針,定義時需要初始化,並且不能更改.

 int Numb = 0;

 int *const curErr = &Numb;  //一旦初始化,指向不能更改.

 PS:這種指針不可更改指向,但可以更改所指向的非const對象的值.

 

⑤指向const對象的const指針.(③+④)

 const double *const pi_str = &pi;

 PS:既不能更改指向,也不能更改所指向的值.

 

 動態創建數組(使用new和delete)

一,定義與初始化

   int *pia = new int[10](); 

  //創建含有10個元素的數組,在數組後的圓括號()是對編譯器初始化數組的要求,所有元素置爲0.

二,動態分配空數組.

   size_t n = get_size();               //get_size()是一個獲取用戶提供值的函數

   int *p = new int[n];               //動態創建維數值爲n的int數組並返回數組第一個元素的地址,保存於p指針中

  for(int*q = p; q != p+n; q++)

    {}                 //對該數組進行操作

三,動態空間釋放.

  delete [] pia;  

  //此處的方括號[]很重要,告訴編譯器所釋放的是一個數組,若缺少,內存只會釋放數組的一個元素的空間,從而產生內存泄漏(memory leak).

 

 

C++ PRIMER中 C風格的字符串 也是數組一大知識點,但它告訴我們要儘量避免使用C風格的字符串,

應該儘量使用c++所提供的標準庫string類型.不僅簡單,容易理解,而且不易出錯.個人還是偏向使用string類型對象,

所以本篇就省略對 C風格的字符串 的相關筆記, 有需要時再作整理.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章