C 陣列與指標回顧總結

2021-09-13 14:37:45 字數 1860 閱讀 5057

1

//陣列名是常量指標,2//

4//a+1 是相對陣列起始位址偏移了sizeof(int)位元組5//

&a+1 是相對於陣列起始位址偏移了sizeof(a)位元組

6int a = ;

7 cout << *a << *(a + 1) << *(a + 2) << *(a + 3) << endl; //

132489

10 cout << a << "

"<< &a << endl; //

兩位址相同

11 cout << &a + 1

<< ","

<< &a + 2

<< endl; //

0048fbb8,0048fbc8,剛好差了16位元組

1213 auto ta = a; //

這個方式有趣,只能用這種方式原樣使用陣列

14 cout << ta[0] << ta[1] << ta[2] << ta[3] << endl; //

1324

1516

//向上取址,正確方式

17int b = 10;18

int* p = &b;

19int** pp = &p; //

20int*** ppp = &pp;

21int**** pppp = &ppp;

2223

//向上取址,錯誤方式

24int** ppt = &(&b);

//&b是常量位址,&(&b)是對常量取址,錯誤行為,只有變數能取址

2526

27//

定義乙個指向 int[4]型別的指標pa,注意,陣列元素個數必須相等,不能是 int(*pa)[2] = &a;

28int(*pa)[4] = &a;

2930

//同理,可以先定義乙個int (*)[4]型別,再用它定義變數

31 typedef int(*arr4ptr)[4]; //

宣告型別

32 arr4ptr px = &a; //

定義變數

3334

//陣列記憶體是連續的嗎?

35//

答案:陣列的一級元素在記憶體中都是連續存放的,示例如下:

3637

int iarr1[6]; //

記憶體連續

38int iarr2[6]; //

記憶體連續

39int iarr3[6]; //

記憶體連續

40float farr[3]; //

記憶體連續

4142

int* arrptrs[3

];43

44 arrptrs[0] =iarr1;;

45 arrptrs[1] =iarr2;

46 arrptrs[2] =iarr3;

4748

//一級元素共3個,每個都是型別為 int*的指標,它們在記憶體中是連續存放的:

49//

002cf994,002cf998,002cf99c

50 cout << &(arrptrs[0]) << ","

<< &(arrptrs[1]) << ","

<< &(arrptrs[2]) <5152

//二級元素iarr1,iarr2, iarr3明顯是不連續存放的,因為它們是三個不相關的普通變數

53 cout << iarr1 << ","

<< iarr2 << ","

<< iarr3 << endl;

參考:

posted on 2018-02-12 12:25收藏

個人回顧總結

答 我們的軟體要解決如何讓同學們在愉悅歡快的遊戲中收穫知識,如何把學習變成一件相對不枯燥的事情,我們利用充足的時間做了計畫,並同夏大偉老師進行商討解決了對於需求的滿足。答 有,相對來說時間相對充裕,但是由於我們要做的是遊戲,乙個全新的東西嗎,所以制定計畫有一些費力。答 我們小組意見都會說出來,如果不...

專案回顧 總結

一 團隊中每個人針對專案回顧模板中的問題,用markdown語法寫下自己的思考和回答並發布到自己的 我們的軟體要解決什麼問題?是否定義得很清楚?是否對典型使用者和典型場景有清晰的描述?我們的軟體主要解決藥品庫存量的管理,我們定義清楚,我們軟體面對的使用者是醫生和藥品庫存管理人員,面對的場景是醫院 是...

專案回顧 總結

設想和目標 1.我們的軟體要解決什麼問題?是否定義得很清楚?是否對典型使用者和典型場景有清晰的描述?一些小的功能細節 清楚 有。2.是否有充足的時間來做計畫?有。3.團隊在計畫階段是如何解決同事們對於計畫的不同意見的?投票,用人數多的計畫。使用者量,使用者對重要功能的接受程度和我們事先的預想一致麼?...