C語言(11)—— 數組(超絕詳細總結)

Hi!冒險者😎,歡迎闖入 C 語言的奇幻異世界🌌!

我是 ankleless🧑?💻,和你一樣的闖蕩者~ 這是我的冒險筆記打怪升級之路——C語言之路📖,里面有踩過的坑🕳、攢的技能🌟、遇的驚喜🌈,希望能幫你少走彎路?。

愿我們在代碼山巒?各自攀登,頂峰碰拳👊,共賞風景呀!🥳

目錄

1. 數組的概念

2. 一維數組

2.1 一維數組的創建

2.2 一維數組的初始化

2.3 一維數組的類型

2.4 一維數組下標

2.5 一維數組元素的輸入和輸出

2.6 一維數組在內存中的存儲

2.7 sizeof操作符

3. 二維數組

3.1 二維數組的概念

3.2?二維數組的創建

3.3 二維數組的初始化

3.3.1 不完全初始化

3.3.2 完全初始化

3.3.3 按照行初始化

3.3.4 初始化的省略

3.4 二維數組下標

3.5 二維數組的輸入和輸出

3.6 二維數組在內存中的存儲

1. 數組的概念

數組是一組相同類型元素的集合,他是一種數據結構,用于按順序存儲相同類型的多個數據元素

數組中存放的是一個或者多個數組,但是數組中元素的個數不能為0

數組中存放的多個數據的類型是相同的。

數組分為一維數組多維數組,多維數組一般比較多見的是二維數組

2. 一維數組

2.1 一維數組的創建

我們常常使用下列的代碼來創建一個簡單的一維數組:

type  arr  [數值常量];
type 為元素類型
arr  為數組名稱

存放在數組中的值稱為數組的元素,數組在創建的時候可以指定數組的大小和數組的元素類型

type指的是數組中存放數據的類型,可以是:char、short、int、float等,也可以是自定義的類型,如結構體;

arr指的是數組名的名字,這個名字我們可以根據數組在程序中的作用進行命名,增強代碼可讀性;

[ ]中的常量值用來指定數組的大小,這個數組的大小是根據實際需求指定的,一經創建,他的內存空間就是固定的,這種方法也被稱為靜態定長數組的創建

比如:我們希望存儲10次模擬考試的成績,我們可以創建如下數組:

int score [10];//score有分數的意思,可以提高代碼的可讀性

2.2 一維數組的初始化

創建了數組之后,我們還需要對一維數組進行初始化,否則未經初始化得到的內存空間會留有“臟數據”(如下圖)

在數組的創建時,我們需要給他一些初始值,這個操作我們稱為數組的初始化

//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第?個元素初始化為1,剩余的元素默認初始化為0
//錯誤的初始化 - 初始化項太多
int arr3[3] = {1, 2, 3, 4};

2.3 一維數組的類型

數組也是有類型的,數組算是一種自定義類型,去掉數組名留下的就是數組的類型。

int arr1[10];//數組類型為int [10]
int arr2[12];//數組類型為int [12]
char ch[5];//數組類型為char [5]

那我們應該如何使用一維數組呢?

2.4 一維數組下標

C語言中規定數組是有下標的,下標是從0開始的,假設數組有n個元素,那么最后一個元素的下標是n - 1,下標就相當于數組元素的編號,如下:

int arr[10] = {1,2,3,4,5,6,7,8,9,10}

在C語言中數組的訪問提供了一個操作符[ ],這個操作符叫:下標引用操作符

有了下標[ ]操作符這兩個工具,我們就能快速訪問數組中的一個元素,體現了數組的隨機訪問的特點。

如果我們想輸出arr數組中的元素7,就可以使用arr[6];如果我們訪問arr[0],得到的元素就是1。

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("%d ", arr[6]);//7printf("%d ", arr[0]);//1return 0;
}

2.5 一維數組元素的輸入和輸出

那么我們應該如何對一個數組進行數據的輸入和打印呢,這里我們可以用到for循環、scanf函數、printf函數相結合的方法,具體實現方式如下:

int main()
{int arr[10] = {0};for (int i = 0; i < 10; i++){scanf("%d", &arr[i]);}for (int i = 0; i < 10; i++){printf("%d", arr[i]);}return 0;
}

2.6 一維數組在內存中的存儲

一維數組中的元素在內存中是如何存儲的呢?我們可以通過打印他們的地址來進行觀察

從輸出結果來看,數組隨著小標的增長,地址是由小到大變化的,并且我們發現每兩個相鄰的元素之間相差4,(因為一個整型是4個字節)。所以我們可以知道:數據在內存中是連續存放的

也是因為數組的這個特性,我們可以通過指針的形式來訪問它的數據元素,具體講解見如下文章:C語言(09)——關于指針(逐漸清晰版)_內存指針-CSDN博客

2.7 sizeof操作符

在C和C++中,sizeof是一個操作符,不是函數

sizeof可以用來計算類型或者變量的大小,數組也是一種數據類型,故而使用sizeof我們可以得到數組的大小:

#include <stido.h>
int main()
{int arr[10] = {0};printf("%d\n", sizeof(arr[0]));//計算?個元素的??,單位是字節return 0;
}

加上接下來的代碼,我們也可以求得數組的元素個數:

printf("%d",sizeof(arr)/sizeof(arr[0]));

3. 二維數組

3.1 二維數組的概念

一維數組的元素都是內置類型的,當我們把一維數組作為數組的元素時,就產生了二維數組,二維數組作為數組元素的數組被稱為三維數組,二維數組以上的數組統稱為多維數組

3.2?二維數組的創建

二維數組我們又該如何創建呢?

type arr_name[常量值1][常量值2];例如:
int arr[3][5];
double data[2][8];

在上述的例子int arr[3][5]中:

3表示數組有3行;

5表示每一行有5個元素;

int表示數組的每個元素都是整型類型;

arr是數組名,可以根據自己的需求制定名字。

3.3 二維數組的初始化

二維數組創建時,我們給他們設置一些初始值,這個過程我們稱為二維數組的初始化。

3.3.1 不完全初始化
int arr1[3][5] = {1,2};
int arr2[3][5] = {0};

3.3.2 完全初始化
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

3.3.3 按照行初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};

3.3.4 初始化的省略
int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};

3.4 二維數組下標

類比一維數組,下標在數組中的功能是強大的,那我們應該如何使用下標來確定特定的數組元素呢?二維數組是有行和列的(即下標),只要鎖定了行和列就能唯一鎖定數組中的一個元素。

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

C語言規定,二維數組的行是從0開始的,列也是從0開始的,如下所示:

圖中最右側綠色的數字表示行號,第一行藍色的數字表示列號,都是從0開始的,比如,我們說第二行第四列,我們就可以快速定位到數組元素7。

3.5 二維數組的輸入和輸出

參考一維數組的輸入和輸出,二維數組的變更就是多了一個下標值的判斷,即嵌套一次循環,具體實現方式如下:

#include <stdio.h>
int main()
{int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};int i = 0;//遍歷?//輸?for(i=0; i<3; i++) //產??號{int j = 0;for(j=0; j<5; j++) //產?列號{scanf("%d", &arr[i][j]); //輸?數據}}//輸出for(i=0; i<3; i++) //產??號{int j = 0;for(j=0; j<5; j++) //產?列號{printf("%d ", arr[i][j]); //輸出數據}printf("\n");}return 0;
}

3.6 二維數組在內存中的存儲

同樣地,我們也可以通過對二維數組元素地址的打印來剖析他在內存中的存儲方式:

觀察輸出的結果,我們可以發現每一個內部的元素都是相鄰的,地址之間相差4個字節(int類型的空間大小),跨行位置處的兩個元素(如:arr[0][4]和arr[1][0])之間也是相差4個字節,所以在二維數組中的每個元素也是連續存放的,這是數據結構中的順序存儲結構典型表現形式。

附:一些小tips(晚些更新~)

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

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

相關文章

【AI生成+補充】高頻 hql的面試問題 以及 具體sql

以下是高頻HQL面試題及對應SQL示例&#xff0c;涵蓋核心語法、優化技巧和典型場景&#xff0c;可直接用于面試準備&#xff1a; 一、基礎操作與DDL 1. 創建分區表 & 動態插入分區 sql -- 創建外部分區表&#xff08;按日期分區&#xff09; CREATE EXTERNAL TABLE logs…

開源 Arkts 鴻蒙應用 開發(十七)通訊--http多文件下載

文章的目的為了記錄使用Arkts 進行Harmony app 開發學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發app&#xff0c;臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 Arkts …

Cloudflare Tunnel 使用SAAS回源加速配置教程

在使用 Cloudflare Tunnel 時,通過“主域名+加速域名”的聯動配置,既能隱藏內網 IP,又能優化訪問速度。本文以實際部署場景為例(主域名 zhuyuming.dpdns.org、加速域名 jiasu.dpdns.org),帶你一步步完成內網服務穿透(以 192.168.1.6:5555 網頁服務為例),實操性強,可直…

C++實戰

Ref deepwiki vuecruddllamma.cpp 目標 計劃實現一個C項目&#xff0c;前端用vue&#xff0c;后端用C和llama.cpp。實現可以進行邏輯功能和AI推理。

dify 調用本地的 stable diffusion api生成圖片的工作流搭建

Dify調用本地Stable Diffusion API的工作流搭建指南 核心架構 #mermaid-svg-ce029i4XFKrDzRgU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ce029i4XFKrDzRgU .error-icon{fill:#552222;}#mermaid-svg-ce029i4XFK…

【Web后端】Django、flask及其場景——以構建系統原型為例

一、Django 和 Flask 簡介 Django 是一個高級 Python Web 框架&#xff0c;提供了完整的“開箱即用”功能&#xff0c;包括 ORM、認證、管理后臺等&#xff0c;便于快速開發安全且可維護的網站。Flask 是一個輕量級 Python Web 框架&#xff0c;核心功能比較簡單&#xff0c;但…

飛算JavaAI:從智能調度到出行服務的全鏈路技術升級

免責聲明&#xff1a;此文章所有內容都是實驗測試數據 目錄一、智慧交通核心場景的技術突破1.1 交通態勢感知與智能預警系統1.2 公共交通智能調度系統1.3 一體化出行服務系統二、智慧交通系統效能升級實踐2.1 交通數據中臺構建結語&#xff1a;重新定義智慧交通技術邊界一、智慧…

vscode的wsl環境,ESP32驅動0.96寸oled屏幕

注意大小寫&#xff0c;wsl&#xff08;也就是linux環境&#xff09;嚴格區分大小寫。有幫助記得訂閱專欄點贊&#xff0c;當前不定期持續更新。 一、文件夾格式&#xff1a; project/ # 項目根目錄 ├─ main/ # 主程序文件夾 │ ├─ mai…

CodeBuddy AI Coding 企業場景落地實踐與思考

&#x1f449;目錄1 引言2 診斷團隊研發流程3 選擇合適的 AI CODING 工具4 團隊 AI 研發流程落地實踐5 全面 CodeBuddy &#xff0c;深入 CodeBuddy6 誠邀共建在 AI 浪潮席卷全球的今天&#xff0c;AI CODING 已經不是企業研發團隊的可選項&#xff0c;而是必選項。如果你是企業…

windows下hashcat使用gpu破解execl打開密碼

需要的軟件 1.hashcat &#xff1a;https://hashcat.net 2.john the ripper &#xff1a;https://www.openwall.com 獲取execl加密文件的Hash PS G:\dl\john-1.9.0-jumbo-1-win64\john-1.9.0-jumbo-1-win64\run> python .\office2john.py .\test6.xlsx test6.xlsx:$office$*…

SpringCloud -- Nacos詳細介紹

5. Nacos 5.1 Nacos介紹 Nacos 可以理解為微服務的“電話簿 遙控器”。它是阿里巴巴開源的一個核心工具&#xff0c;主要解決微服務架構中的兩大問題&#xff1a; 5.1.1 服務注冊與發現&#xff08;電話簿&#xff09; 服務注冊&#xff1a;當某個微服務&#xff08;比如“訂單…

【狂熱算法篇】探尋圖論幽徑之SPFA算法:圖論迷宮里的閃電尋徑者(通俗易懂版)

?????本篇帶大家探究的是SPFA算法&#xff1b;從基本理解&#xff0c;畫圖分析展示&#xff0c;再到最后的代碼實現&#xff0c;以及為何要這樣實現代碼&#xff0c;等一些細節問題做解釋&#xff0c;相關題型應用&#xff0c;非常值得喲&#xff0c;尤其是剛入門的小白學…

webrtc網頁一對一通話

基于flutter-webrtc-server做的更改&#xff0c;只使用網頁實現語音和視頻一對一通話&#xff0c;不支持多對多。 項目地址: https://github.com/chging/rtc-server

Java調用bat執行python腳本

1、問題概述&#xff1f;在windows環境中可以通過Java調用bat執行文件&#xff0c;從而調用python腳本&#xff0c;使用起來方便。2、實現方式&#xff1f;2.1、核心代碼bat文件可以在任意位置//獲取文件在項目中的文職 String batFilePathSystem.getProperty("user.dir&q…

JavaWeb 歡迎頁設置詳解

JavaWeb 歡迎頁設置詳解 歡迎頁&#xff08;Welcome Page&#xff09;是用戶訪問 Web 應用根目錄時自動展示的默認頁面。在 JavaWeb 中有多種配置方式&#xff1a;一、配置方式 1. 通過 web.xml 配置&#xff08;傳統方式&#xff09; <web-app><!-- 配置歡迎頁列表 -…

反射和類加載機制

一 類加載機制 1.1 加載機制簡介 Java程序從編寫到運行這個過程大致可以分為兩個階段&#xff1a;編譯階段和運行階段。 編譯階段指的是&#xff0c;java源代碼文件**(*.java)被java編譯器&#xff08;javac&#xff09;編譯成字節碼文件(*.class)**的過程。這個過程不需要直接…

在CentOS 7 上安裝 MySQL 數據庫

文章目錄前言一、使用官方 MySQL 倉庫安裝 MySQL1.1 下載并安裝 MySQL 官方 YUM 倉庫1.2 安裝 MySQL YUM 倉庫1.3 安裝 MySQL1.3.1 補充&#xff1a;1.4 啟動 MySQL 服務1.5 設置 MySQL 服務開機啟動1.6 獲取臨時 root 密碼1.7 配置 MySQL1.7.1 注意事項1.8 完成安裝二、使用默…

Linux:套接字

從進程的視角來看&#xff0c;網絡通信就是一個主機上的進程和另外一個主機上的進程進行信息傳遞&#xff0c;因此對于操作系統而言&#xff0c;網絡通信就是一種進程間通信的方式。不過這種進程間通信有特殊之處&#xff1a;同一臺主機下可以通過進程ID來標識一個唯一的進程&a…

Android init.rc詳解3

關于Android Init的詳解&#xff0c;關于Action&#xff0c;Service&#xff0c;Trigger的請參考Android init.rc詳解1&#xff0c;關于Options的請參考Android init.rc詳解2&#xff0c;本章將介紹常見的Commands。 1 Commands bootchart [start|stop] 啟動或停止bootcharti…

Sentinel原理之規則管理

文章目錄1. 基礎知識2. 數據源使用2.1 RedisDatasource2.2 ZookeeperDatasource1. 基礎知識 流量控制規則&#xff08;FlowRule&#xff09;&#xff1a; 閾值類型grade&#xff1a; 0&#xff08;并發線程數&#xff09;&#xff1a;限制同時處理請求的線程1&#xff08;QPS…