C語言中指標與陣列



陣列指標 是C語言中兩個重要的語言結構,它們在許多方面彼此相關。在許多情況下,使用指標執行的任務也可以藉助陣列來執行。

但是,陣列和指標之間存在一些概念上的差異。閱讀本章以瞭解它們的差異以及比較優勢和劣勢。

C語言中的陣列

在C程式中,陣列是儲存在相鄰記憶體位置的類似型別元素的索引集合。

宣告陣列,我們使用以下語法 -

data_type arr_name [size];

大小應為非負整數。例如 -

int arr[5];

陣列可以在宣告時初始化,其元素以逗號分隔的列表形式放在花括號內。提及其大小是可選的。

int arr[] = {1, 2, 3, 4, 5};

陣列中的每個元素都具有唯一的整型索引,從“0”開始。在C語言中,陣列的下界始終為“0”,上界為“size – 1”。

陣列示例

以下示例顯示瞭如何使用索引下標遍歷陣列 -

#include <stdio.h>

int main (){

   /* an array with 5 elements */
   int arr[5] = {10, 20, 30, 40, 50};

   int i;

   /* output each array element's value */
   printf("Array values with subscripts: \n");

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

輸出

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

Array values with subscripts:
arr[0]: 10
arr[1]: 20
arr[2]: 30
arr[3]: 40
arr[4]: 50

C語言中的指標

C允許您訪問編譯器隨機分配的變數的記憶體位置。取地址運算子(&)返回變數的地址。

儲存另一個變數地址的變數稱為指標。指標的型別必須與它儲存地址的變數型別相同。

為了與目標變數型別區分開來,指標的名稱以星號(*)為字首。如果我們有一個int變數,則其指標宣告為“int *”

int x = 5;
int *y = &a;

注意:在陣列的情況下,其第0個元素的地址被分配給指標。

int arr[] = {1, 2, 3, 4, 5};
int *ptr = &arr[0];

事實上,陣列的名稱本身解析為第0個元素的地址。

Pointer vs Array

因此,我們也可以寫 -

int *ptr = arr;

由於陣列的元素放置在相鄰的記憶體位置,並且每個下標的地址都增加4(在int陣列的情況下),因此我們也可以使用此功能來藉助指標遍歷陣列元素。

指標示例

以下示例顯示瞭如何使用指標遍歷陣列 -

#include <stdio.h>

int main (){

   /* an array with 5 elements */
   int arr[5] = {10, 20, 30, 40, 50};
   int *x = arr;

   int i;

   /* output each array element's value */
   printf("Array values with pointer: \n");

   for(i = 0; i < 5; i++) {
      printf("arr[%d]: %d\n", i, *(x+i));
   }

   return 0;
}

輸出

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

Array values with pointer
arr[0]: 10
arr[1]: 20
arr[2]: 30
arr[3]: 40
arr[4]: 50

C語言中陣列和指標的區別

下表重點介紹了陣列和指標之間的重要區別 -

陣列 指標
它將同類資料型別的元素儲存在相鄰的記憶體位置。 它儲存變數或陣列的地址
陣列定義為相似資料型別的集合。 指標是一個儲存另一個變數地址的變數。
可以儲存的變數數量由陣列的大小決定。 指標只能儲存單個變數的地址。
陣列的初始化可以在定義它們時完成。 指標在定義時不能初始化。
陣列的性質是靜態的。 指標的性質是動態的。
陣列不能根據使用者的需求調整大小。 指標可以在任何時候調整大小。
陣列的分配在編譯時完成。 指標的分配在執行時完成。
廣告