c++primer的第四章數組與指標小結。
數組:由類型名、標識符、和維數組成的複合資料型別;類型名:規定數組中元素類型;維數:規定數組中包含元素的個數;
指標:指標用於指向對象,指標儲存的是另一個對象的地址;
一:數組定義和初始化
1:數組的維數必須用值大於1的常量運算式定義;
2:如果數組沒有顯示提供元素初始化,則數組元素會像普通變數一樣初始化,注意以下三條;
(1)在函數體外定義的數組,其元素均初始化為0;
(2)在漢書體內定義的數組,其元素無初始化;
(3)如果數組元素類型是類類型,則不管在哪個位置,都自動調用類的預設建構函式進行初始化,如果該類沒有初始化,則須提供顯示初始化;
3:不允許數組直接複製和賦值;
二:數組操作
通過下標操作符訪問,從0開始;
三:指標的定義和初始化
1.c++中用*把一個標識符聲明為指標;
int *p;
從右想做閱讀,定義p,一個指向int類型的指標變數;
2:指標儲存0值則表明指標不指向任何對象;
3:不能使用未初始化的指標
未初始化的指標存放著不確定的地址,操作該地址上的資料,會導致程式崩潰;
4:指標進行初始化只能是以下四種情況:
(1)0值常量運算式
(2)類型匹配的對象的地址
(3)另一對象之後的下一地址-//個人理解是類似鏈表之類的p->next
(4)同類型的另一個有效指標
5:void*指標
void*指標表示可以儲存任意類型的對象的地址;
6:產生左值的解引用操作
string s("hello");
string *sp = &s;
*sp = "world";//此時s和*sp均為“world”
修改指標所指向對象的值用*sp
修改指標的值用sp
7:指標和引用
int ival = 1024;
int ival2 = 2048;
int *pi = ival;
int *pi2 = ival2;
pi = pi2; //pi now points to ival2;
int &ri = ival;
int &ri2 = ival2;
ri = ri2; //now ival==ival2==2048
8:指向指標的指標
int ival = 1;
int *pi = &val;// pi point to an int
int **ppi = π //ppi points to a pointer to int
9:使用指標訪問數組元素
int ia[] = {0, 2, 4,6, 8};
int *ip = ia;//ip points to ia[0]
ip = &ia[4];
(1)指標的算術操作
ip = ia;
int *ip2 = ip +4;//ip2 points to ia[4]
int last = *(ia +4); //last==8
int last = *ia +4; // last == ia[0]+4==4
(2)下標和指標
int *p = &ia[2]; //*p == 4
int i = p[2]; //i==8 p[2]==*(p+2)
int k = p[-2]; //k ==0
10:指標和const
(1)指向const對象的指標
不能保證指向const的指標所指的對象不被改變,如
val = 2;
const int *p = &val;
val = 3;//此時val==3
(2)const 指標
int *const pi = &val;//指標本身的值不能被改變和賦值,但是所指對象可以被改變
(3)指向const對象的const指標
const int *const pi = &val;//指標和所指對象都不能被改變;
11:建立動態數組
int *pia = new int[10];//申請一個含有10個int類型元素的數組;並返回該數組第一個元素的指標;
如果數組元素是類類型,則使用該類的預設建構函式初始化,如果是內建類型,則無初始化;
int *pia2 = new int[10]();//此時已經初始化,圓括弧要求編譯器對數組初始化;
動態分配數組:
size_t n = get_size();
int *p = new int[n];//如果n == 0代碼仍然正確執行,只不過此時new出來的指標不能解引用,因為它沒有指向任何元素;
...
釋放數組
delete []pia;//不能少[]
12:多維陣列
int ia[]3[4];//array of size 3, each element is an array of ints of size 4
int (*ip)[4] = ia;//ip points to an array of 4 ints
ip = &ia[2];//ia[2] points to an array of 4 ints
注意:
int *ip[4];//array of points to int
int (*ip)[4];//pointer to an array of 4 int
呵呵第一篇博文。