C語言中的陣列



C語言中的陣列是一種資料結構,可以儲存相同資料型別的固定大小的順序元素集合。陣列用於儲存資料集合,但通常將陣列視為相同型別變數的集合更有用。

什麼是 C 語言中的陣列?

C語言中的陣列是相同資料型別的資料項的集合。陣列可以儲存一個或多個相同資料型別的值,這些值可以是基本資料型別(int、float、char),也可以是使用者定義型別,例如結構體或指標。在 C 語言中,陣列中元素的型別應與陣列本身的資料型別匹配。

陣列的大小,也稱為陣列的長度,必須在宣告中指定。一旦宣告,C 語言陣列的大小就不能更改。當宣告陣列時,編譯器會分配儲存宣告的元素數量所需的連續記憶體塊。

為什麼我們在 C 語言中使用陣列?

陣列用於儲存和操作相同型別的資料。

假設我們要儲存 10 名學生的成績並求平均值。我們宣告 10 個不同的變數來儲存 10 個不同的值,如下所示:

int a = 50, b = 55, c = 67, . . . ;
float avg = (float)(a + b + c +. . . ) / 10;

這些變數將在記憶體中分散開來,它們之間沒有任何關係。重要的是,如果我們想擴充套件求 100(或更多)名學生平均值的問題,那麼宣告如此多的單個變數變得不切實際。

陣列提供了一種緊湊且記憶體高效的解決方案。由於陣列中的元素儲存在相鄰的位置,因此我們可以輕鬆地訪問相對於當前元素的任何元素。由於每個元素都有一個索引,因此可以對其進行直接操作。

示例:在 C 語言中使用陣列

回到儲存 10 名學生的成績並求平均值的問題,使用陣列的解決方案將是:

#include <stdio.h>

int main(){
   int marks[10] = {50, 55, 67, 73, 45, 21, 39, 70, 49, 51};
   int i, sum = 0;
   float avg;

   for (i = 0; i <= 9; i++){
      sum += marks[i];
   }

   avg = (float)sum / 10;
   printf("Average: %f", avg);
   return 0;    
}

輸出

執行程式碼並檢查其輸出:

Average: 52.000000

陣列元素儲存在連續的記憶體位置。每個元素都由從“0”開始的索引標識。最低地址對應於第一個元素,最高地址對應於最後一個元素。

Arrays

在 C 語言中宣告陣列

要在 C 語言中宣告陣列,您需要指定元素的型別以及要儲存的元素數量。

宣告陣列的語法

type arrayName[size];

“size”必須是一個大於零的整數常量,其“type”可以是任何有效的 C 語言資料型別。在 C 語言中宣告陣列的方法有很多種。

示例:在 C 語言中宣告陣列

在下面的示例中,我們聲明瞭一個包含 5 個整數的陣列,並列印所有陣列元素的索引和值:

#include <stdio.h>

int main(){
   int arr[5];
   int i;

   for (i = 0; i <= 4; i++){
      printf("a[%d]: %d\n", i, arr[i]);
   }
   return 0;
}
輸出

執行程式碼並檢查其輸出:

a[0]: -133071639
a[1]: 32767
a[2]: 100
a[3]: 0
a[4]: 4096

在 C 語言中初始化陣列

在宣告陣列時,您可以透過提供用花括號 {} 括起來的逗號分隔的值集來初始化它。

初始化陣列的語法

data_type array_name [size] = {value1, value2, value3, ...};

初始化陣列的示例

以下示例演示了整數陣列的初始化

// Initialization of an integer array
#include <stdio.h>

int main() 
{
  int numbers[5] = {10, 20, 30, 40, 50};

  int i;  // loop counter

  // Printing array elements
  printf("The array elements are : ");
  for (i = 0; i < 5; i++) {
    printf("%d ", numbers[i]);
  }

  return 0;
}

輸出

The array elements are : 10 20 30 40 50

將所有陣列元素初始化為 0 的示例

要將所有元素初始化為 0,請將其放在花括號內

#include <stdio.h>

int main(){
   int arr[5] = {0};
   int i;

   for(i = 0; i <= 4; i++){
      printf("a[%d]: %d\n", i, arr[i]);
   }
   return 0;
}

輸出

執行此程式碼時,將產生以下輸出:

a[0]: 0
a[1]: 0
a[2]: 0
a[3]: 0
a[4]: 0

部分初始化陣列的示例

如果值的列表小於陣列的大小,則其餘元素將初始化為“0”。

#include <stdio.h>

int main(){
   int arr[5] = {1,2};
   int i;

   for(i = 0; i <= 4; i++){
      printf("a[%d]: %d\n", i, arr[i]);
   }
   return 0;
}

輸出

執行此程式碼時,將產生以下輸出:

a[0]: 1
a[1]: 2
a[2]: 0
a[3]: 0
a[4]: 0

部分和特定元素初始化的示例

如果陣列被部分初始化,則可以在方括號中指定元素。

#include <stdio.h>

int main(){
   int a[5] = {1,2, [4] = 4};
   int i;
   
   for(i = 0; i <= 4; i++){
      printf("a[%d]: %d\n", i, a[i]);
   }
   return 0;
}

輸出

執行後,將產生以下輸出:

a[0]: 1
a[1]: 2
a[2]: 0
a[3]: 0
a[4]: 4

獲取 C 語言中陣列的大小

編譯器分配一個連續的記憶體塊。分配的記憶體大小取決於陣列的資料型別。

示例 1:整數陣列的大小

如果聲明瞭一個包含 5 個元素的整數陣列,則陣列以位元組為單位的大小將為“sizeof(int) x 5”

#include <stdio.h>

int main(){
   int arr[5] = {1, 2, 3, 4, 5};
   printf("Size of array: %ld", sizeof(arr));
   return 0;
}

輸出

執行後,您將獲得以下輸出:

Size of array: 20

sizeof 運算子返回變數佔用的位元組數。

示例 2:陣列元素的相鄰地址

每個int的大小為 4 個位元組。編譯器為每個元素分配相鄰的位置。

#include <stdio.h>

int main(){
   int a[] = {1, 2, 3, 4, 5};
   int i;

   for(i = 0; i < 4; i++){
      printf("a[%d]: %d \t Address: %d\n", i, a[i], &a[i]);
   }
   return 0;
}

輸出

執行程式碼並檢查其輸出:

a[0]: 1 	 Address: 2102703872
a[1]: 2 	 Address: 2102703876
a[2]: 3 	 Address: 2102703880
a[3]: 4 	 Address: 2102703884

在此陣列中,每個元素都是int型別。因此,第 0 個元素佔用前 4 個位元組 642016 到 19。下一個下標處的元素佔用接下來的 4 個位元組,依此類推。

示例 3:雙精度型別陣列

如果我們有double型別的陣列,則每個下標處的元素佔用 8 個位元組

#include <stdio.h>

int main(){
   double a[] = {1.1, 2.2, 3.3, 4.4, 5.5};
   int i;

   for(i = 0; i < 4; i++){
      printf("a[%d]: %f \t Address: %ld\n", i, a[i], &a[i]);
   }
   return 0;
}

輸出

執行程式碼並檢查其輸出:

a[0]: 1.100000 	 Address: 140720746288624
a[1]: 2.200000 	 Address: 140720746288632
a[2]: 3.300000 	 Address: 140720746288640
a[3]: 4.400000 	 Address: 140720746288648

示例 4:字元陣列的大小

“char”變數的長度為 1 個位元組。因此,char 陣列的長度將等於陣列的大小。

#include <stdio.h>

int  main(){
   char a[] = "Hello";
   int i;

   for (i=0; i<5; i++){
      printf("a[%d]: %c address: %ld\n", i, a[i], &a[i]);
   }
   return 0;
}

輸出

執行程式碼並檢查其輸出:

a[0]: H address: 6422038
a[1]: e address: 6422039
a[2]: l address: 6422040
a[3]: l address: 6422041
a[4]: o address: 6422042

在 C 語言中訪問陣列元素

陣列中的每個元素都由一個唯一的遞增索引標識,從“0”開始。要按索引訪問元素,可以透過在陣列名稱後方方括號內放置元素的索引來實現。

透過在陣列名稱後方的方括號內指定所需元素的索引(偏移量)來訪問陣列的元素。例如:

double salary = balance[9];

上述語句將從陣列中獲取第 10 個元素並將該值賦給“salary”。

訪問 C 語言中陣列元素的示例

以下示例顯示瞭如何使用上述所有三個概念,即宣告、賦值和訪問陣列。

#include <stdio.h>
 
int main(){

   int n[5];  /* n is an array of 5 integers */ 
   int i, j;
 
   /* initialize elements of array n to 0 */         
   for(i = 0; i < 5; i++){
      n[i] = i + 100;
   }
   
   /* output each array element's value */
   for(j = 0; j < 5; j++){
      printf("n[%d] = %d\n", j, n[j]);
   }
   return 0;
}

輸出

執行此程式碼後,您將獲得以下輸出:

n[0] = 100
n[1] = 101
n[2] = 102
n[3] = 103
n[4] = 104

索引允許隨機訪問陣列元素。陣列可以包含結構體變數、指標甚至其他陣列作為其元素。

更多關於 C 語言陣列的內容

陣列作為 C 語言中的一個重要概念,需要更多關注。以下與陣列相關的重要的概念對於 C 語言程式設計師來說應該清楚:

序號 概念 & 描述
1 多維陣列

C 語言支援多維陣列。多維陣列最簡單的形式是二維陣列。

2 將陣列傳遞給函式

您可以透過指定陣列的名稱(不帶索引)來將指向陣列的指標傳遞給函式。

3 從函式返回陣列

C 語言允許函式返回陣列。

4 指向陣列的指標

您可以透過簡單地指定陣列名稱(不帶任何索引)來生成指向陣列第一個元素的指標。

廣告