指標與數組小結

來源:互聯網
上載者:User

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

呵呵第一篇博文。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.