陣列和指標(上)

2021-08-31 04:08:04 字數 2454 閱讀 4168

陣列和指標並不相同,只是有類似的地方。

int a=10;

// 定義變數

int b;

b=10

;//宣告變數

宣告是指普通的宣告,宣告的不是本身,而是在其他地方建立的物件;宣告時不會開闢空間,故宣告陣列時不需要提供關於陣列的長度,對於多維陣列,需提供除最左邊一維之外其他維的長度。

定義是指特殊的宣告,會直接開闢空間。

變數由空間、內容、型別組成。

int a=10;

int b=a;

其中,a=10,a代表變數空間,稱為左值。(左值一般位於表示式左邊,但不絕對,必須是變數,即可修改其內容才能位於表示式的左邊)

b=a,a代表變數內容,稱為右值。(右值一般位於表示式右邊,但也不絕對)

定義:相似元素的集合。(元素:c語言中所有型別)

1.陣列傳參時會發生降維現象,即不管幾維陣列傳參時均會降維為指標。

2.傳參時均會形成臨時變數。

void

fun(

int arr,

int sz)

intmain()

;int sz=

sizeof

(arr)

/sizeof

(arr[0]

);fun(arr,sz)

;return0;

}

3.傳參時形引數組 void fun(int arr),為下標操作符,裡面的數字可省略(可不寫可為任何數字),因為沒有實際意義。

4.規定中,左值必須為可修改的值,雖陣列名也可確定物件在記憶體中的資料,也是左值,但不可作為賦值的物件,因陣列名是不可修改的值。

5.陣列型別是由陣列型別和元素個數共同決定。

6.陣列可直接訪問資料,例如a[1],相當於獲得a+1這個位址訪問其資料。

7.陣列名只能表示整個陣列的兩種特殊情況

int

main()

;printf

("%d\n"

,sizeof

(arr));

printf

("%d\n"

,sizeof

(arr+1)

);printf

("%p\n"

,&arr)

;}

(1)sizeof(arr),只有陣列名時代表整個陣列,若增添任何運算,陣列名就變為首元素的位址;

(2)&arr,取位址陣列名時,代表整個陣列。

其他情況陣列名均代表首元素的位址。

int

main()

1.間接訪問資料;指標訪問時先定義乙個指標p,這個指標指向某個空間,對其解引用訪問資料。

2.定義指標時,系統並不為指標所指向的物件分配空間,只分配指標本身的空間。

int

main()

除非在定義指標時用字串初始化,此時系統會為其開闢空間。但此時字串被定義為唯讀,不可通過指標修改,有些編譯器中,字串常量被放置於只允許讀取的文字段中,故指標釋放後,字串內容還存在;陣列如果用字串常量初始化,後面可進行修改,陣列釋放時字串內容同時也釋放。

int

main()

//結果為blackfght

3.下標總是與指標的偏移量相同
int

main()

用指標訪問a[i],以上三種方式均可。

指標陣列

指標陣列著重點在陣列,即為存放指標的陣列。

陣列指標

陣列指標是指標,是能指向陣列的指標,所以陣列指標中存放的應該是陣列的位址。

int

main()

那麼這兩個哪個是指標陣列,哪個是陣列指標呢?

在c語言中,基本操作符的運算級下表操作符()在解引用操作符(*)之上,故第乙個p1先與結合,p1是陣列,int *p1[10]表示整形指標的陣列;第二個()的優先順序最高,故p2先解引用操作符結合,p2為指標,表示指向字元型陣列的指標。

注意:對指標+1等於加所指向型別的大小。在32位平台下,二級指標以上+1均是+4個位元組。

二維陣列會降維為陣列指標。

void

fun(

int(

*p)[5]

,int sz)

intmain()

因為在認知上其實所有陣列都是一維陣列。這怎麼理解呢?

一維陣列編譯器在開闢空間時為連續的線性空間。二維陣列書本上常見的幾行幾列只是為了方便我們理解,實際上在記憶體中儲存時二維陣列也是線性儲存,可以將其理解為一行為陣列的乙個數值,一行又有5個陣列,故傳參時降維為陣列指標。

注意:在32位平台下,所有指標型別傳參時均消耗4個位元組,形成指標臨時變數。

指標破解 上)指標和陣列

初期接觸指標時,我們大都是對指標進行簡單的解引用賦值等操作,指標的操作物件大都是int或者char等基本型別,所以簡單理解後便可以輕鬆應對。但是,就如同剛學會騎自行車後就要飛向賽博坦星球 汽車人老家 基本的int char 還沒有掌握完全,取而代之的是各種形態各種變化的 機械 怪物 指標等複雜的宣告...

陣列指標和指標陣列

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...

陣列指標和指標陣列

一 定義 陣列指標 陣列指標 是指向陣列 首元素的位址的 指標,其本質為指標 這個指標存放的是陣列首位址的位址,相當於2級指標,這個指標不可移動 指標陣列 陣列元素為指標的陣列,其本質為陣列。二 舉例 int a 3 4 這個無需多說,就是乙個 二維陣列 int p 4 就相當於int p 4 它就...