C語言高階之陣列

2021-08-16 06:34:09 字數 1599 閱讀 3355

一維陣列

相關概念陣列的宣告int a

陣列的初始化

int a [10] = //部分初始化

int a[10] = ;//清零

陣列名稱做為整體使用的情況

陣列名稱訪問陣列成員時是做為起始位址,但是有兩種情況:求大小和取位址,是做為乙個整體。

假設現在宣告乙個陣列 int a[10],那麼什麼是求大小和取位址呢。

sizeof(a) 的結果和 sizeof(int [10]) 一樣都是40個位元組,是整個陣列所佔的記憶體空間大小。

&a 和 &a +1 的位址差距也是一整個陣列記憶體的大小也是40位元組。

下面有兩道相應習題。

習題1:

這道題是結果是4

解題思路是,如下圖當陣列名稱取位址時是做為乙個整體所以&a +1 其實是又開闢了40個位元組的記憶體空間,而int * 代表是1個int 就是乙個4位元組,[-2],就是往前走2*4個位元組那個值就是4了。

習題2:

這道題是結果是5

解題思路是,

和上題思路一樣,不過這裡要看清括號括的內容,這裡是先&a+1,然後轉換為int * 再減1,這裡的減1和[-1]作用一樣就是往回走1個陣列元素的長度剛好就是5了。

陣列做為函式引數

此時這裡的輸出結果是n*4,而不是1000*4,所以可以說明陣列做為函式引數時陣列的大小由傳入的n決定。

程式設計練習題

int a [5] = 求乙個陣列裡面的次大值。

解題思路,假定乙個最大值乙個次大值,遍歷陣列,如果比最大值大替換最大值,原最大值變成次大值,如果比最大值小比次大值大替換次大值,直至遍歷結束。

#include#define strlen 5

//判斷陣列的次大值

//注意這裡的陣列元素必須大於等於2

int main();

intmax = a[0];

int submax = a[1];

for(int i = 0;iif(a[i]>max)

else

if(a[i]>submax)

}printf("次大值是%d",submax);

return

0;}

輸出結果

c語言高階 陣列型別與陣列指標

元素型別角度 陣列是相同型別的變數的有序集合 記憶體角度 連續的一大片記憶體空間 陣列元素的個數可以顯式或隱式指定 陣列初始化可以使用或memeset兩種方式 void main 隱式指定元素個數 int b 100 顯式指定元素個數 int c 200 編譯時就已經確定所有值為零 memset c...

C語言 陣列與指標高階(二)

c語言中能否靈活應用指標就能看出你的c語言功底如何,接下來是我對在學習指標過程中,對一下較為苦澀概念的理解及總結。指標的運算可歸納為以下三部分 1 指標 整數 一般來說,此類運算只是左右移動指標所指向陣列元素的位置而已 若指標指向的是 陣列名,此時其加1,則移動的是乙個陣列了,不是乙個元素 2 指標...

C語言高階 基於陣列的排序

普通選擇排序 1 實現原理和思想 公升序 1 在未排序的陣列中,選擇首元素與其後元素進行比較,若其後元素比首元素大,則兩元素交換,直至比較到最後乙個元素,這是第一輪比較,得到首元素有序。2 接下來從第2個,第3個元素 重複1 的步驟,直至剩下最後乙個元素,則最後乙個元素也是有序,是本組元素的最大值。...