天天看點

深入學習C語言 數組和指針

作者:嵌入式講堂

目錄

  1. 引言
  2. 數組
  3. 指針
  4. 指針常見錯誤用法
  5. 指針注意事項
  6. 小結

引言

數組和指針是C語言中非常重要的概念,它們可以用于存儲和操作資料。本文将深入探讨C語言中的數組和指針,幫助讀者更好地了解這一概念。

數組

在C語言中,數組是一種存儲相同類型資料的資料結構。數組中的每個元素都有一個唯一的下标,可以通過下标通路數組中的元素。C語言中的數組可以是一維數組、二維數組等。

一維數組

一維數組是最簡單的數組,它可以存儲一組相同類型的資料。一維數組的定義方式如下:

類型 數組名[元素個數];           

例如,定義一個包含5個整數的數組:

int arr[5];           

可以通過下标通路數組中的元素,下标從0開始,例如:

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;           

二維數組

二維數組是由多個一維數組組成的數組,它可以存儲一個二維表格。二維數組的定義方式如下:

類型 數組名[行數][列數];           

例如,定義一個包含3行4列的整數二維數組:

int arr[3][4];           

可以通過下标通路二維數組中的元素,例如:

arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[0][3] = 4;
arr[1][0] = 5;
arr[1][1] = 6;
arr[1][2] = 7;
arr[1][3] = 8;
arr[2][0] = 9;
arr[2][1] = 10;
arr[2][2] = 11;
arr[2][3] = 12;           

指針

在C語言中,指針是一種變量,它存儲了一個變量的位址。指針可以用于通路和操作變量,也可以用于動态配置設定記憶體。

指針變量

指針變量是一種變量,它存儲了一個變量的位址。指針變量的定義方式如下:

類型 *指針變量名;           

例如,定義一個指向整數的指針變量:

int *ptr;           

可以使用取位址符&擷取一個變量的位址,例如:

int a = 10;
int *ptr = &a;           

指針運算

指針可以進行加、減、比較等運算。指針的加、減運算是基于指針所指向的資料類型的大小進行的。

例如,指針加1表示指向下一個同類型的元素,指針減1表示指向上一個同類型的元素:

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = &arr[2]; // 指向arr[2]的指針
printf("%d\n", *(ptr + 1)); // 輸出arr[3]的值
printf("%d\n", *(ptr - 1)); // 輸出arr[1]的值           

動态記憶體配置設定

動态記憶體配置設定是指程式在運作時申請一塊記憶體,并在不需要時釋放它。C語言中的動态記憶體配置設定由malloc()、calloc()和realloc()等函數實作。

例如,申請一塊大小為10個整數的記憶體:

int *ptr = (int *)malloc(10 * sizeof(int));           

指針常見錯誤用法

指針常見的錯誤用法包括:

指針未初始化

指針未初始化時,它指向的位址是不确定的,使用未初始化的指針會導緻程式崩潰。

int *ptr; // 未初始化的指針
*ptr = 10; // 錯誤的使用未初始化的指針           

指針越界

指針越界是指指針通路了不屬于它的記憶體,這會導緻程式崩潰或産生不可預測的結果。

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = &arr[5]; // 指向arr[5]的指針
*ptr = 6; // 錯誤的使用指針越界           

指針使用後未指派為NULL

指針使用後未指派為NULL,會導緻它成為一個野指針,使用野指針會導緻程式崩潰。

int *ptr = (int *)malloc(10 * sizeof(int));
free(ptr); // 釋放記憶體
*ptr = 10; // 錯誤的使用野指針           

指針注意事項

使用指針時需要注意以下事項:

指針類型要與所指向的變量類型比對

指針類型要與所指向的變量類型比對,否則會導緻程式崩潰或産生不可預測的結果。

int a = 10;
char *ptr = &a; // 錯誤的指針類型           

指針使用前要初始化

指針使用前要初始化,否則它指向的位址是不确定的,使用未初始化的指針會導緻程式崩潰。

int *ptr; // 未初始化的指針           

指針使用後要指派為NULL

指針使用後要指派為NULL,否則它成為一個野指針,使用野指針會導緻程式崩潰。

int *ptr = (int *)malloc(10 * sizeof(int));
free(ptr); // 釋放記憶體           

小結

本文介紹了C語言中的數組和指針,希望本文能夠幫助讀者更好地了解這一概念。數組和指針是C語言中非常重要的概念,它們可以用于存儲和操作資料,也可以用于動态記憶體配置設定等操作。包括指針的概念、用法、常見錯誤用法和注意事項。指針是C語言中非常重要的概念,它可以用于通路和操作變量,也可以用于動态配置設定記憶體。使用指針時需要注意指針類型、初始化和指派為NULL等問題,避免指針錯誤用法導緻程式崩潰

繼續閱讀