【C語言】數組篇

目錄

  • 引言
  • 一維數組
    • 數組的定義
    • 數組的初始化
      • 完全初始化
      • 部分初始化
      • 省略數組長度
    • 數組元素的訪問
  • 多維數組
    • 二維數組的定義
    • 二維數組的初始化
      • 完全初始化
      • 部分初始化
      • 省略第一維長度
    • 二維數組元素的訪問
  • 遍歷數組元素
    • 遍歷一維數組
    • 遍歷二維數組
  • 數組作為函數參數
    • 一維數組作為函數參數
    • 二維數組作為函數參數
  • 注意事項
    • 數組越界
    • 數組名作為指針
  • 總結

引言

在 C 語言的世界里,數組是一種基礎且強大的數據結構。它就像一個整齊排列的盒子,每個盒子都可以存放相同類型的數據。通過合理使用數組,我們能夠高效地處理大量的數據。本文將從數組的基本概念入手,逐步深入探討其在實際編程中的應用。

一維數組

數組的定義

在 C 語言中,定義一維數組的語法如下:

類型說明符 數組名[常量表達式];

這里的類型說明符決定了數組中每個元素的類型,比如int表示整數類型,float 表示浮點類型等。數組名是我們給這個數組起的名字,方便后續引用。而常量表達式則規定了數組的長度,也就是數組中元素的個數。
例如:

int scores[5];

這行代碼定義了一個名為 scores 的整數數組,它可以存儲 5 個整數。需要注意的是,常量表達式必須是一個常量或者常量表達式,不能是變量。

數組的初始化

數組的初始化有多種方式,下面我們來逐一介紹。

完全初始化

當我們知道數組中每個元素的值時,可以進行完全初始化。

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

在這個例子中,數組 numbers 的 5 個元素分別被初始化為 1、2、3、4、5。

部分初始化

如果只知道數組的部分元素值,其余元素會被自動初始化為 0。

int numbers[5] = {1, 2};

此時,numbers[0] 為 1,numbers[1] 為 2,而 numbers[2]、numbers[3] 和 numbers[4] 都為 0。

省略數組長度

當我們在初始化時提供了所有元素的值,可以省略數組的長度,編譯器會自動根據初始化的值來確定數組的長度。

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

這里數組 numbers 的長度被編譯器確定為 5。

數組元素的訪問

數組元素通過下標來訪問,下標從 0 開始。例如,對于前面定義的numbers數組,numbers[0]表示數組的第一個元素,numbers[1]表示第二個元素,以此類推。

#include <stdio.h>int main() {int numbers[5] = {1, 2, 3, 4, 5};printf("The first element is: %d\n", numbers[0]);printf("The third element is: %d\n", numbers[2]);return 0;
}

在這段代碼中,我們通過下標訪問了數組numbers的第一個和第三個元素,并將它們打印輸出。

多維數組

二維數組的定義

二維數組可以看作是一個矩陣,它的定義語法如下:

類型說明符 數組名[常量表達式1][常量表達式2];

常量表達式 1 表示數組的行數,常量表達式 2 表示數組的列數。
例如:

int matrix[3][4];

這定義了一個 3 行 4 列的二維數組matrix。

二維數組的初始化

二維數組的初始化也有多種方式。

完全初始化

int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}
};

這里,我們將二維數組 matrix 的每個元素都進行了初始化。

部分初始化

int matrix[3][4] = {{1, 2},{5},{9, 10, 11}
};

未初始化的元素會被自動初始化為 0。

省略第一維長度

int matrix[][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}
};

編譯器會根據初始化的值自動確定第一維的長度。

二維數組元素的訪問

二維數組元素通過行下標和列下標來訪問,行下標和列下標都從 0 開始。

#include <stdio.h>int main() {int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};printf("The element at row 1, column 2 is: %d\n", matrix[1][2]);return 0;
}

在這個例子中,我們訪問了二維數組 matrix 中第二行第三列的元素。

遍歷數組元素

遍歷一維數組

for 循環是遍歷一維數組最常用的方法,通過控制循環變量作為數組的下標來依次訪問數組元素。

#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};int i;// 遍歷數組并打印每個元素for (i = 0; i < 5; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

遍歷二維數組

對于二維數組,通常使用嵌套的 for 循環來遍歷,外層循環控制行,內層循環控制列。

#include <stdio.h>int main() {int arr[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};int i, j;// 外層循環控制行for (i = 0; i < 3; i++) {// 內層循環控制列for (j = 0; j < 4; j++) {printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

數組作為函數參數

數組可以作為函數的參數傳遞,這在處理大量數據時非常有用。

一維數組作為函數參數

當一維數組作為函數參數時,實際上傳遞的是數組的首地址。

#include <stdio.h>// 函數聲明
void printArray(int arr[], int size);int main() {int numbers[5] = {1, 2, 3, 4, 5};printArray(numbers, 5);return 0;
}// 函數定義
void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}

在這個例子中,函數 printArray 接受一個一維數組和數組的長度作為參數,并將數組中的元素打印輸出。

二維數組作為函數參數

二維數組作為函數參數時,需要指定第二維的長度。

#include <stdio.h>// 函數聲明
void printMatrix(int matrix[][4], int rows);int main() {int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};printMatrix(matrix, 3);return 0;
}// 函數定義
void printMatrix(int matrix[][4], int rows) {for (int i = 0; i < rows; i++) {for (int j = 0; j < 4; j++) {printf("%d ", matrix[i][j]);}printf("\n");}
}

這里,函數 printMatrix 接受一個二維數組和數組的行數作為參數,并將二維數組的元素打印輸出。

注意事項

數組越界

在訪問數組時,一定要確保下標在合法范圍內。如果下標超出了數組的長度,會導致未定義行為,可能會引發程序崩潰或產生不可預期的結果。

數組名作為指針

在大多數情況下,數組名會被隱式轉換為指向數組首元素的指針。但在使用sizeof運算符時,數組名表示整個數組。

#include <stdio.h>int main() {int numbers[5] = {1, 2, 3, 4, 5};printf("The size of the array is: %zu\n", sizeof(numbers));return 0;
}

在這個例子中,sizeof(numbers) 返回的是整個數組的大小,而不是指針的大小。

總結

C 語言數組是一種非常重要的數據結構,它可以幫助我們高效地處理大量相同類型的數據。通過掌握一維數組、多維數組的定義、初始化和訪問,以及數組作為函數參數的使用方法,我們能夠編寫出更加高效、靈活的程序。同時,要注意數組越界等問題,避免程序出現錯誤。希望本文能幫助你更好地理解和使用 C 語言數組。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71850.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCV視頻解碼性能優化十連擊(實測幀率提升300%)

解密工業級視頻處理優化方案&#xff01;從硬件加速到多線程榨干CPU/GPU性能&#xff0c;附RTSP流調優參數與內存泄漏排查技巧。 &#x1f527; 優化前準備 環境檢測腳本 import cv2# 驗證硬件加速支持 print("CUDA支持:", cv2.cuda.getCudaEnabledDeviceCount() &…

基于編譯器特性淺析C++程序性能優化

最近在惡補計算機基礎知識&#xff0c;學到CSAPP第五章的內容&#xff0c;在這里總結并且展開一下C程序性能優化相關的內容。 衡量程序性能的方式 一般而言&#xff0c;程序的性能可以用CPE&#xff08;Cycles Per Element&#xff09;來衡量&#xff0c;其指的是處理每個元素…

transformer模型介紹——大語言模型 LLMBook 學習(二)

1. transformer模型 1.1 注意力機制 **注意力機制&#xff08;Attention Mechanism&#xff09;**在人工智能中的應用&#xff0c;實際上是對人類認知系統中的注意力機制的一種模擬。它主要模仿了人類在處理信息時的選擇性注意&#xff08;Selective Attention&#xff09;&a…

word甲烷一鍵下標

Sub 甲烷下標()甲烷下標 宏Selection.Find.ClearFormattingSelection.Find.Replacement.ClearFormattingWith Selection.Find.Text "CH4".Replacement.Text "CHguoshao4".Forward True.Wrap wdFindContinue.Format False.MatchCase False.MatchWhole…

Dify 本地部署教程

目錄 一、下載安裝包 二、修改配置 三、啟動容器 四、訪問 Dify 五、總結 本篇文章主要記錄 Dify 本地部署過程,有問題歡迎交流~ 一、下載安裝包 從 Github 倉庫下載最新穩定版軟件包,點擊下載~,當然也可以克隆倉庫或者從倉庫里直接下載zip源碼包。 目前最新版本是V…

2.1 掌握XML基礎知識

本文介紹了結構化、半結構化和非結構化數據的概念與特點。結構化數據以固定格式存儲于數據庫&#xff0c;便于查詢與管理&#xff0c;常用于金融等領域。半結構化數據如XML、JSON&#xff0c;具有一定的組織形式但模式不固定&#xff0c;適用于Web內容和日志文件。非結構化數據…

Android Studio 配置國內鏡像源

Android Studio版本號&#xff1a;2022.1.1 Patch 2 1、配置gradle國內鏡像&#xff0c;用騰訊云 鏡像源地址&#xff1a;https\://mirrors.cloud.tencent.com/gradle 2、配置Android SDK國內鏡像 地址&#xff1a;Index of /AndroidSDK/

超過 37000 臺 VMwareESXi 服務器可能受到持續攻擊威脅

近日&#xff0c;威脅監測平臺影子服務器基金會&#xff08;The Shadowserver Foundation&#xff09;發布報告&#xff0c;指出超 3.7 萬個互聯網暴露的威睿&#xff08;VMware&#xff09;ESXi 實例存在嚴重安全隱患&#xff0c;極易受到 CVE-2025-22224 漏洞的攻擊。該漏洞屬…

npm終端執行時報錯

終端npm執行時報錯下錯誤&#xff1a; 報錯了&#xff0c;就來百度&#xff0c;報錯的原因是 1、這個錯誤是因為 PowerShell 的執行策略&#xff08;Execution Policy&#xff09;限制了腳本的運行 2、默認情況下&#xff0c;Windows 系統可能會禁止運行未簽名的腳本&#x…

JVM類加載器面試題及原理

JVM只會運行二進制文件&#xff0c;類加載器的作用就是將字節碼文件加載到JVM中&#xff0c;從而讓Java程序能夠啟動起來。 1. 類加載器的種類 啟動類加載器&#xff08;BootStrap ClassLoader&#xff09;&#xff1a;加載JAVA_HOME/jre/lib目錄下的庫擴展類加載器&#xff…

C語言每日一練——day_3(快速上手C語言)

引言 針對初學者&#xff0c;每日練習幾個題&#xff0c;快速上手C語言。第三天。&#xff08;會連續更新&#xff09; 采用在線OJ的形式 什么是在線OJ&#xff1f; 在線判題系統&#xff08;英語&#xff1a;Online Judge&#xff0c;縮寫OJ&#xff09;是一種在編程競賽中用…

用Qt手搓AI助手,挑戰24小時開發DeepSeek Assistant!

一、項目需求分析與技術選型 DeepSeekAssistant是一款基于深度求索&#xff08;DeepSeek&#xff09;API的智能對話助手&#xff0c;核心需求包括&#xff1a; 用戶界面友好&#xff1a;支持多輪對話展示數據持久化&#xff1a;歷史記錄存儲與檢索異步網絡通信&#xff1a;AP…

Linux 環境變量快速上手指南

Linux 環境變量快速上手 1. 什么是環境變量 環境變量&#xff08;Environment Variables&#xff09;是操作系統中用于存儲配置信息的一種機制&#xff0c;可以在運行時被進程讀取和使用。常見環境變量示例&#xff1a; PATH: 存放可執行文件搜索路徑。HOME: 當前用戶的家目錄…

萬字技術指南STM32F103C8T6 + ESP8266-01 連接 OneNet 平臺 MQTT/HTTP

此博客為一份詳細的指南&#xff0c;涵蓋 STM32F103C8T6 通過 ESP8266-01 連接 OneNet 平臺&#xff0c;并使用 MQTT/HTTP 進行數據通信的完整流程。這份文檔包括&#xff1a; OneNet 平臺的介紹與功能概覽在 OneNet 上創建和配置設備的方法STM32CubeIDE 的開發環境搭建ESP826…

Go本地緩存設計與實現

本地緩存是一個項目中很常見的組件。在很多人的眼中就是一個簡單的key-value的map存儲即可實現&#xff0c;但實際上&#xff0c;設計一個本地緩存需要考慮的問題遠比你想象的多&#xff0c;比如說&#xff0c;本地緩存是將數據存儲在內存&#xff0c;若數據量激增突破了內存限…

深入解析 JavaScript 原型與原型鏈:從原理到應用

原型和原型鏈是 JavaScript 中實現對象繼承和屬性查找的核心機制。為了更深入地理解它們&#xff0c;我們需要從底層原理、實現機制以及實際應用等多個角度進行分析。 1. 原型&#xff08;Prototype&#xff09; 1.1 什么是原型&#xff1f; 每個 JavaScript 對象&#xff08…

FPGA時序約束的幾種方法

一,時鐘約束 時鐘約束是最基本的一個約束,因為FPGA工具是不知道你要跑多高的頻率的,你必要要告訴工具你要跑的時鐘頻率。時鐘約束也就是經常看到的Fmax,因為Fmax是針對“最差勁路徑”,也就是說,如果該“最差勁路徑”得到好成績,那些不是最差勁的路徑的成績當然比…

Visual Studio Code打開遠程服務器項目,打開服務器Android上百G源碼,SSH免密連接方式

Visual Studio Code打開遠程服務器項目 1&#xff0c;Visual Studio Code拓展中&#xff0c;安裝遠程插件 Remote Development 2&#xff0c;SSH免密連接&#xff0c;A電腦免密連接B&#xff0c;配置B電腦.ssh/authorized_keys A電腦的.ssh/id_rsa.pub中的公鑰內容&#xff0c;…

AWS云編排詳解-Cloud Formation

作者:私語茶館 1.關鍵概念 名詞 說明 軟件: CloudFormation 描述AWS 資源、配置值和互連關系。借助集成設施即代碼加快云部署 CloudFormation Designer 拖拽式圖形化模板編輯界面。 Amazon Simple Notification Service (SNS) SNS可通過電子郵件跟蹤堆棧的創建和刪除進度,…

《PyQt5》——設計Python GUI(圖形用戶界面)實例

PyQt5 PyQt5的配置和基礎使用可以參考這篇文章&#xff1a;《 PyQt5》—— 創建 Python GUI&#xff08;圖形用戶界面&#xff09; Python GUI&#xff08;圖形用戶界面&#xff09;實例 本實例是設計一個通過玉米和豆粕的價格來預測生豬的價格&#xff0c;并顯示預測價格與實…