C 陣列(初始化陣列,陣列邊界,陣列與指標)

2021-09-24 01:48:18 字數 2096 閱讀 1461

陣列資料型別相同的一系列元素組成。陣列元素按順序儲存在記憶體中,通過整數下標subscript(或索引index)可以訪問各元素。c把陣列看作是派生型別,因為陣列是建立在其他型別的基礎上。

int powers[8]

=;/* 從ansi c開始支援這種初始化 */

以逗號分隔的值列表(用花括號括起來)來初始化陣列,各值之間用逗號分隔。在逗號和值之間可以使用空格。

(1)當初始化列表中的值少於陣列元素個數時,【編譯器】會把剩餘的元素都初始化為0。也就是說,如果不初始化陣列,陣列元素和未初始化的普通變數一樣,其中儲存的都是未定義;但是,如果初始化陣列部分元素剩餘的元素就會被初始化為0。

(2)如果初始化列表的項數多於陣列元素個數,【編譯器】會將其視為錯誤。

【編譯器】不會檢查陣列下標是否使用得當。使用越界下標的結果是未定義的。使用越界的陣列下標會導致程式改變其他變數的值。

不同的【編譯器】執行該程式的結果可能不同,有些會導致程式異常中止。

不檢查邊界,c 程式可以執行更快。【編譯器】沒必要捕獲所有的下標錯誤,因為在程式執行之前,陣列的下標值可能尚未確定。因此,為安全起見,【編譯器】必須在執行時新增【額外**】檢查陣列的每個下標值,這會降低程式的執行速度。c相信程式設計師能編寫正確的**,這樣的程式執行速度更快。

指標提供一種以符號形式使用位址的方法。

因為計算機的硬體指令非常依賴位址,指標在某種程度上把程式設計師想要傳達的指令以更接近機器的方式表達。因此,使用指標的程式更有效率。

尤其是,指標能有效地處理陣列。【陣列表示法】其實是在變相地使用【指標】。

下面的等式體現了c語言的靈活性:

dates +2==

&date[2]

// 相同的位址

*(dates +2)

== date[2]

// 相同的值

arr[i]*(arr+i)這兩個表示式都是等價的。無論arr是【陣列名】還是【指標變數】,這兩個表示式都沒問題。但是,只有當arr是【指標變數】時,才能使用arr++這樣的表示式。

【指標表示法】(尤其與遞增運算子一起使用時)更接近機器語言,因此一些【編譯器】在編譯時能生成效率更高的**。

然而,許多程式設計師認為他們的主要任務是確保**正確、邏輯清晰,而**優化應該留給【編譯器】去做。

函式的形參,還有一點要注意。只有在函式原型函式定義中,才可以用int arr代替int * arr

int sum (

int arr,

int n)

;

int *arr形式和int arr形式都表示arr是乙個指向int的指標int arr只能用於宣告形式引數,表明arr指向的不僅僅乙個int型別值,還是乙個int型別陣列元素

因為陣列名是該陣列首元素的位址,作為實際引數的陣列名要求形式引數是乙個與之匹配的指標。只有在這種情況下,c才會把int arrint * arr解釋成一樣。也就是說,arr指向int指標

【函式原型】可以省略引數名,但是,在【函式定義】中不能省略引數名。

C 陣列 陣列的初始化

陣列和變數一樣,在使用時必須對其進行初始化,即給變數或陣列賦值。陣列可以在定義時初始化,也可以在使用時初始化。下面的 演示了如何初始化陣列。int arrayint 也可以用下面方式初始化陣列 int arrayint arrayint new int 初始化陣列還可將前面的方式組合起來,用這種方式...

C 陣列初始化

定義 int pia new int 10 array of 10 uninitialized ints 此 new 表示式分配了乙個含有 10 個 int 型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標 pia。在自由儲存區中建立的陣列物件是沒有名字的,只能通過其位址間接地訪...

C 陣列初始化

c 陣列初始化 定義 int pia new int 10 array of 10 uninitialized ints 此 new 表示式分配了乙個含有 10 個 int 型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標 pia。在自由儲存區中建立的陣列物件是沒有名字的,只能通...