深度解析陣列與指標(一)

2021-10-10 14:59:53 字數 3291 閱讀 8339

陣列:是一組相同型別元素的集合

一維陣列 :type arr_name [size]

陣列建立:

int arr1[10]

;int count =10;

int arr2[count]

;

陣列的初始化是指:在建立陣列的同時給陣列的內容一些合理初始值(初始化)。

int arr2=

;int arr3[5]

=;char arr4[3]

=;char arr5=

;char arr6=

"abcdef"

;

1、陣列能整體被初始化,不能整體賦值2、必須把陣列當做整體看,開闢空間時陣列整體開闢,整體釋放,陣列在記憶體當中一定連續存放(線性儲存)

3、陣列訪問可以通過下標和陣列訪問。

int arr[10]

=;//陣列的不完全初始化(陣列中的元素被全部初始化為0)

//計算陣列的元素個數

int sz =

sizeof

(arr)

/sizeof

(arr[0]

);//對陣列內容賦值,陣列是使用下標來訪問的,下標從0開始。所以:

int i =0;

//做下標

for(i=

0; i<

10; i++

)//這裡寫10,好不好?

//輸出陣列的內容

for(i=

0; i<10;

++i)

二維陣列:

//陣列建立

int arr[3]

[4];

char arr[3]

[5];

double arr[2][4]

//陣列初始化

int arr[3]

[4]=

;int arr[3]

[4]=

,};int arr[

4]=,

};

//訪問二維陣列中的元素

int arr[3]

[4]=

;int i =0;

for(i=

0; i<

3; i++)}

//遍歷陣列中的元素

for(i=

0; i<

3; i++

)}

1、二維陣列在位址中也是連續存放

2、可以看做一維陣列,陣列裡面的元素為一維陣列。

一般情況下為陣列的首元素位址

特例:1. sizeof(陣列名),計算整個陣列的大小,sizeof內部單獨放一 個陣列名,陣列名表示整個陣列。

2. &陣列名,取出的是陣列的位址。&陣列名,陣列名表示整個陣列。

陣列作為函式引數時會降維,降維其指向其內部元素型別(可能是 double ,float,int ,陣列,指標)的指標。

void

test

(int a)

intmain()

;printf

("%d\n"

,sizeof

(a))

;test

(a);

system

("pause");

return0;

}

執行結果:

指標:在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為「指標」。意思是通過它能找到以它為位址的記憶體單元。

通俗來講指標是個變數,存放位址

int a =10;

//在記憶體中開闢一塊空間

int*p =

&a;//這裡我們對變數a,取出它的位址,可以使用&操作符。

//將a的位址存放在p變數中,p就是乙個之指標變數。

指標是用來存放位址的,位址是唯一標示一塊位址空間的。

指標的大小在32位平台是4個位元組,在64位平台是8個位元組。

int a=10;

int*p =

&a;//

printf

("%d"

,*p)

;//對指標解引用,指向其所指向的目標

野指標:就是指標指向的位置是不可知的(隨機的、不正確的、沒有明確限制的)

出現野指標的原因:

//指標未被初始化

int*p;

//區域性變數指標未初始化,預設為隨機值

*p =20;

return

0;

//指標訪問越界

int arr[10]

=;int*p = arr;

int i =0;

for(i=

0; i<=

11; i++

)return

0;

如何規避野指標

指標初始化

小心指標越界

指標指向空間釋放即使置null

指標使用之前檢查有效性

指標±整數:對指標加一是加上指標所指向型別的大小==>(指標加上sizeof(type))

指標-指標:表示兩指標之間所經歷的元素(元素的型別由指標決定)的個數,指向同一塊記憶體才有意義,常用統一字串、陣列。

指標的型別:

1、決定了指標向前或者向後走一步有多大(距離)。

2、對指標解引用的時候有多大的許可權(能操作幾個位元組)。 比如: char* 的指標解引用就只能訪問乙個位元組,而 int* 的指標的解引用就能訪問四個位元組。

深度解析陣列名與指標的區別

最近經常遇到sizeof 運算子在計算陣列大小出錯的問題,究其原因還是學藝不精,廢話不多說,上 首先看下面這段 include using namespace std void fun1 int p void foo int i 但是,常量變成變數,只是值的傳遞,其內涵和位址還是丟失了,於是fun2...

指標陣列與陣列指標 go解析

對於指標陣列和陣列指標在c或c 中也經常被討論,尤其對於初學者來說會分辨不清楚。其實在每個詞中間新增乙個 的 就很好理解了,指標的陣列,陣列的指標。本文就通過go語言來分別解釋一下陣列指標與指標陣列。對於指標陣列來說,就是 乙個陣列裡面裝的都是指標,在go語言中陣列預設是值傳遞的,所以如果我們在函式...

陣列指標解析

題目 最近看到一道模擬題,題目如下 include include include include includeusing namespace std int main int p 3 p n cout p 0 0 p 0 1 p 2 endl cout p 3 endl cout p 1 1 e...