類型名、
標識符和
維數組成的復合數據類型,類型名規定了存放在數組中的元素類型,維數則指定數組中包含的元素個數。
值大於等於1的常量表達式定義。此常量表達式只能包含整型字面值常量、枚舉常量或者用常量表達式初始化的整型const對象。非const變量以及要到運行階段才知道其值的const變量都不能用於定義數組的維數。
。
- 在函數體內定義的內置數組,其元素無初始化,其值是不確定的;
- 不管數組在哪裡定義,如果其元素為類類型,則自動調用該類的默認構造函數進行初始化;如果該類沒有默認構造函數,則必須為該數組的元素提供顯式初始化。
3. 特殊的字符數組
字符數組既可以用一組由花括號括起來、逗號隔開的字符字面值進行初始化,也可以用一個字符串字面值進行初始化。
字符串字面值包含一個額外地空字符(null)用於結束字符串。
當使用字符串字面值來初始化創建的新數組時,將在新數組中加入空字符:
ca1[] = { , , };
ca2[] = { , , , };
ca3[] = ;
ca1的維數是3,而ca2和ca3的維數則是4.使用一組字符字面值初始化字符數組時,一定要記得添加結束字符串的空字符。
size_t。
size_t array_size = (size_t ix=; ix != array_size; ++ ia[ix] = ix;
緩存區溢出(buffer overflow)”錯誤,當沒有檢測下標引用了越出數組或者其他類似數據結構邊界時容易出現這個錯誤。
- 0值常量表達式
- 類型匹配的對象的地址
- 另一個對象之後的下一個地址
- 同類型的另一個有效指針
5.具有void* 類型的指針可以保存任意類型對象的地址。
指針操作
[cpp] view plaincopyprint?
- int ival = 1023;
- int *pi = &ival;
- int **ppi = π
[cpp] view plaincopyprint?
- int ia[] = {0,2,4,6,8};
- int i = ia[0];
[cpp] view plaincopyprint?
- int *p = &ia[2]; //ok:p points to the element indexed by 2
- int j = p[1]; //p[1] == ia[3] ,ok:p[1] equivalent to *(p + 1) , p[1] is the same element as ia[3]
- int k = p[-2]; //p[-2] == ia[0] ok:p[-2] is the same element as ia[0]
雖然下標為-2 ,但是被編譯器解析為偏移量,因此相當於*(p - 2).
10.兩個指針減法操作的結果是標准庫類型ptrdiff_t的數據。與size_t類型一樣,ptrdiff_t也是一種與機器相關的類型,在cstddef頭文件中定義。size_t 是unsigned類型,而 ptrdiff_t則是signed整型。
ptrdiff_t n = ip2 - ip;
11. C字符串的標准庫函數
在這個例題中,ca是一個沒有null結束符的字符數組,則計算的結果不可預料。
strlen返回這一段空間中總共有多少個字符,無論如何這個數值不可能是正確的。
(size_t ix = ; ix != arr_size ; ++ cin >>
vector<> ivec(int_arr , int_arr + arr_size);
[cpp] view plaincopyprint?
- int *pia = new int[10]; // array of 10 uninitialized ints
[cpp] view plaincopyprint?
- string *psa = new string[10] ; // 定義10個空string的數組
- int *pia = new[10]; // 定義10個未初始化的int數組
[cpp] view plaincopyprint?
- delete []pia; //該語句回收pia所指向的數組,把相印的內存返還給自由存儲區。