陣列 指標 引用 動態陣列

2021-10-19 17:23:45 字數 2301 閱讀 6390

因為我本身是學過這些的,這一遍是複習和總結,不會面面俱到,希望和大家一起分享。

1、陣列的建立和初始化

1.1、陣列是一種完全靜態的資料結構,在建立時,陣列的維度必須是乙個在編譯時就可以確定的整形常量表示式(和switch的case後面的表示式那樣)。

舉個例子:int arr1[2]是合法的,const int cnum=4; int arr2[cnum],

int arr3[cnum+1],都是合法的,const常量在編譯時確定了

但是 int num=5;int arr[num],這是不合法的,因為num是個變數,雖然賦值了,但是是可以改變的,在編譯時不會確定具體的值。

1.2、初始化方法:一般都用初始化列表,形如:int arr[4]=,int arr[4]=,

int arr=.其中列表裡面元素個數必須小於等於規定的長度,小於計算機會自動補充值,沒有規定長度的話,列表元素個數就是長度。

arr[i]可以獲得陣列中的元素,這很常見就不多說了。

1.3、 要注意的是,陣列不能像vector那樣整體賦值vector2=vector1,為什麼呢?

因為,我們需要知道,陣列是接近底層記憶體的資料結構,陣列名代表了陣列第乙個元素的記憶體位址,這是不能作為左值而修改的。

int num=3;

int*ptr=

#cout<<

"指標的值:"

"指標所指的數字是"

<<

*ptr<同樣我們可以用指標來遍歷陣列,只要把陣列名賦值給指標,然後遍歷陣列。

2.2 指標的算術操作:指標可以加減乙個數字,但是獨特的是,它是與指標型別繫結的,比如,int型別的指標intptr,那麼intptr+2,其實就是記憶體位址加八個位元組,因為int的大小是4個位元組。

指標還可以相減,得到的結果是該資料型別的個數,也是和資料型別繫結的,但是指標之間不存在加法,因為沒有意義,舉個例子,門牌號碼2,4,相減我們知道他們中間隔著兩戶人家,但是相加什麼都代表不了。

2.3 const指標和指向const物件的指標

const int num =3;

int *ptr=&num//這句是錯誤的,因為普通指標不能指向const物件

所以我們需要指向const物件的指標:const int *ptr=&num。指向const物件的指標顯而易見,他不能修改指向物件的值,但是它本身可以指向其他的位址。

而const指標就是一種不能指向其他位址的指標,比如

int num1=1;

int num2=2;

int *const ptr=&num1;

ptr=&num2;//這句話是錯誤的,因為已經指向num1不能修改

同時二者可以結合,const int *const ptr,既不能修改值,也不能修改位址

2.4 我們在建立乙個指標後,最好初始化讓他成為乙個空指標,便於除錯管理

int *ptr=null;如果不初始化,他可能指向未知的位址,可能造成嚴重後果。

2.5指標的陣列和陣列的指標

兩者看起來相似但是完全不同,指標作為一種變數型別,可以有陣列的資料結構,是一種陣列;而陣列的指標則是一種指向陣列的指標。

int arr[3]=;

int (*arrptr)[5]=&arr;//陣列的指標

int *ptr[3]=;//指標的陣列,這裡的星號是和int 聯絡在一起的,代表這個陣列存放的是int型別的指標。

3 動態陣列

3.1 嚴格意義上來說不是陣列,而是用指標來承載malloc()或new操作符動態分配記憶體空間,因為c++引入了new delete 比較簡潔,就介紹這個了

3.2 動態陣列因為是從堆裡面隨機分配相應的空間,所以就算程式結束,其中占用的空間也不會自動釋放,我們必須用delete來釋放空間,new和delete是成雙成對的。

int *numptr=new int(3)//給3分配乙個整形大小的空間

delete numptr;

int *arr=new int[5];

int *ptr=arr//arr相當於陣列的名字

delete arr;

arr=null

3.2 多維陣列

我們主要說二維陣列,二維陣列實質就是乙個陣列的陣列,int arr[3][4]是元素型別為int arr[4],大小是4的陣列。並且二維陣列在計算機中也是線性排列的,先存第一行,接下來第二行,第三行。。。。

形式如下:int arr[3][4]=,,}

4 引用

引用實質就是給變數起了乙個別名,必須和某個變數繫結,所以必須初始化,而指標可以為空;

修改這個別名就是修改這個變數本身,而修改指標只是修改它指向的位址。

陣列 指標 引用

一 指標的概念 指標是記憶體中的位址。1 語法 型別 變數名 這裡的型別是定義了這個指標指向的變數型別。2 指標的運算子 和 1 取位址符 例如 int counta 100 int mm mm counta 假設counta所在位址是2000,這是候m 2000。include void main...

陣列 指標 引用

一 指標的概念 指標是記憶體中的位址。1 語法 型別 變數名 這裡的型別是定義了這個指標指向的變數型別。2 指標的運算子 和 1 取位址符 例如 int counta 100 int mm mm counta 假設counta所在位址是2000,這是候m 2000。include void main...

學習指標引用陣列

首先陣列 a 10 的名字就代表乙個位址,是陣列第乙個元素的位址,即 a 0 int p p a 就是將指標指向陣列a的第乙個元素 或者int p a 與int p a 0 是一樣的 p 1的意思不是將位址直接加1,而是代表同一陣列中下乙個元素的位址,即 a 1 也可以用a 1表示。所以 p 1 a...