C語言基礎(chǔ)(六)數(shù)組相關(guān)
一、為什么需要數(shù)組在編程中我們經(jīng)常需要處理多個相同類型的數(shù)據(jù)。比如存儲10個學(xué)生的成績?nèi)绻挥脭?shù)組就得定義10個單獨的變量score1,score2, …不僅麻煩而且無法用循環(huán)統(tǒng)一處理。數(shù)組正是為了解決這類問題而生的——它能在內(nèi)存中連續(xù)存儲多個相同類型的數(shù)據(jù)并通過下標(biāo)快速訪問每個元素。二、一維數(shù)組基礎(chǔ)1. 數(shù)組的定義語法格式類型說明符 數(shù)組名[常量表達(dá)式];例如inta[10];// 定義一個包含10個int元素的數(shù)組charstr[32];// 定義包含32個char元素的數(shù)組floatarray[5];// 定義包含5個float元素的數(shù)組類型說明符可以是基本數(shù)據(jù)類型int、char、float等也可以是構(gòu)造類型但不能是void。數(shù)組名遵循標(biāo)識符命名規(guī)則字母、數(shù)字、下劃線數(shù)字不能開頭。常量表達(dá)式表示數(shù)組元素個數(shù)必須是編譯時確定的常量不能是變量。2. 數(shù)組元素的訪問通過數(shù)組名[下標(biāo)]訪問元素下標(biāo)從0開始到元素個數(shù)-1結(jié)束。a[0]10;// 給第一個元素賦值a[5]99;// 給第六個元素賦值printf(%d,a[0]);// 輸出第一個元素注意下標(biāo)可以是常量、變量或表達(dá)式結(jié)果必須為整型。訪問時不要超出范圍否則會越界訪問可能導(dǎo)致程序崩潰或數(shù)據(jù)錯亂。3. 數(shù)組的初始化初始化即在定義時給元素賦初值。全部初始化inta[5]{1,2,3,4,5};局部初始化未初始化的元素自動為0inta[5]{1,2,3};// 前三個為1,2,3后兩個為0初始化全0inta[5]{0};// 所有元素為0inta[5]{0,0,0,0,0};省略數(shù)組大小必須初始化inta[]{1,2,3,4,5};// 編譯器自動確定大小為5重要如果不初始化數(shù)組元素的值是隨機的內(nèi)存中遺留的值所以定義時盡量初始化哪怕只是{0}。4. 數(shù)組的存儲特性單一性所有元素類型相同。有序性元素按下標(biāo)從0到N-1順序存儲。連續(xù)性數(shù)組占用一塊連續(xù)的內(nèi)存空間。這一點非常重要因為連續(xù)存儲使得我們可以通過指針和偏移量快速訪問也是數(shù)組效率高的原因。三、數(shù)組的經(jīng)典應(yīng)用排序排序是數(shù)組的典型應(yīng)用。這里以選擇排序為例掌握其思想。選擇排序升序每次從待排序位置開始往后找到最小值放到當(dāng)前位置。inta[10]{1,2,-3,-4,-5,6,7,8,-9,0};intlensizeof(a)/sizeof(a[0]);// 計算元素個數(shù)for(inti0;ilen-1;i){for(intji1;jlen;j){if(a[i]a[j]){// 升序如果前面大于后面交換inttmpa[i];a[i]a[j];a[j]tmp;}}}時間復(fù)雜度O(n2)空間復(fù)雜度O(1)。選擇排序是不穩(wěn)定的相同元素相對順序可能改變。四、字符型數(shù)組字符串C語言沒有專門的字符串類型而是用字符數(shù)組來存儲字符串并以\0ASCII碼0作為結(jié)束標(biāo)志。1. 定義與初始化charstr[32];charstr[32]{h,e,l,l,o};// 不推薦未初始化部分為0charstr[32]{hello};// 推薦charstr[32]hello;// 最常用charstr[]hello;// 自動確定大小為6包含\0注意hello實際占6個字節(jié)5個字符 1個\0。2. 輸入與輸出輸出可以使用printf(%s, str)或puts(str)自動換行。輸入可以使用scanf(%s, str)遇空格或Tab停止或gets(str)遇換行停止但危險可能越界。charstr[100]{0};scanf(%s,str);// 輸入 hello world 只讀入 hellogets(str);// 可讀入帶空格的字符串但存在越界風(fēng)險3. 常用字符串操作函數(shù)手寫實現(xiàn)雖然標(biāo)準(zhǔn)庫提供了strlen、strcpy、strcat等但理解其底層實現(xiàn)至關(guān)重要。① 求字符串長度 (strlen)統(tǒng)計有效字符個數(shù)不包括\0。intmy_strlen(constchar*s){intlen0;while(s[len]!\0){len;}returnlen;}② 字符串拷貝 (strcpy)將源字符串復(fù)制到目標(biāo)數(shù)組目標(biāo)數(shù)組空間要足夠。voidmy_strcpy(char*dst,constchar*src){inti0;while(src[i]!\0){dst[i]src[i];i;}dst[i]\0;// 別忘了結(jié)束標(biāo)志}③ 字符串拼接 (strcat)將源字符串追加到目標(biāo)字符串末尾。voidmy_strcat(char*dst,constchar*src){inti0,j0;while(dst[i]!\0)i;// 找到dst的末尾while(src[j]!\0){dst[i]src[j];i;j;}dst[i]\0;}五、二維數(shù)組二維數(shù)組可以理解為“數(shù)組的數(shù)組”常用于存儲矩陣或表格數(shù)據(jù)。1. 定義與訪問inta[3][4];// 3行4列共12個元素訪問方式a[行下標(biāo)][列下標(biāo)]行下標(biāo)范圍02列下標(biāo)03。2. 初始化全部初始化分行或不分行inta[3][4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};inta[][4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};// 可省略行數(shù)inta[3][4]{1,2,3,4,5,6,7,8,9,10,11,12};// 自動按行填充局部初始化未初始化的補0inta[3][4]{{1,2},{3,4,5},{6}};// 第一行1,2,0,0第二行3,4,5,0第三行6,0,0,0注意在初始化時行數(shù)可以省略但列數(shù)不能省略。3. 二維字符型數(shù)組用于存儲多個字符串如學(xué)生名單。charstr[3][100]{0};// 3個字符串每個最長99字符charstr[3][100]{hello,world,how};輸入輸出時用gets(str[i])或scanf(%s, str[i])循環(huán)處理每一行。六、易錯點與最佳實踐越界訪問下標(biāo)超出范圍不會報錯但會破壞內(nèi)存數(shù)據(jù)務(wù)必確保下標(biāo)在合法范圍內(nèi)。忘記\0結(jié)束符字符數(shù)組作為字符串使用時必須保證有\(zhòng)0否則輸出會亂碼。sizeof與strlen的區(qū)別sizeof是運算符計算數(shù)組占用的總字節(jié)數(shù)包括\0。strlen是函數(shù)計算字符串有效字符個數(shù)不含\0。數(shù)組名是地址常量不能對數(shù)組名賦值如str hello是錯誤的。盡量避免使用gets推薦fgets或scanf配合寬度限制。

相關(guān)新聞

AI寫作合規(guī)指南:原創(chuàng)邊界與內(nèi)容優(yōu)化策略

AI寫作合規(guī)指南:原創(chuàng)邊界與內(nèi)容優(yōu)化策略

1. AI寫作的合規(guī)邊界與價值定位最近兩年,內(nèi)容創(chuàng)作者們對AI寫作工具的態(tài)度經(jīng)歷了從質(zhì)疑到接納的轉(zhuǎn)變過程。我運營的科技類訂閱號在過去半年里,有超過60%的原創(chuàng)內(nèi)容都不同程度地使用了AI輔助創(chuàng)作。但直到現(xiàn)在,仍有很多同行在后臺私信問我&#…

2026/7/31 4:04:55 閱讀更多
Prompt Caching優(yōu)化大模型推理:原理與實踐

Prompt Caching優(yōu)化大模型推理:原理與實踐

1. Prompt Caching技術(shù)概述在大語言模型(LLM)推理過程中,計算資源消耗主要來自兩個部分:處理用戶輸入的prompt階段和生成回復(fù)的decoding階段。傳統(tǒng)KV Cache技術(shù)通過緩存attention層的Key-Value矩陣來優(yōu)化decoding階段的重復(fù)計算,而Prompt Cac…

2026/7/31 4:04:55 閱讀更多
DDD 架構(gòu)實戰(zhàn)案例:大型婚嫁連鎖中臺的數(shù)據(jù)防漏與領(lǐng)域解耦

DDD 架構(gòu)實戰(zhàn)案例:大型婚嫁連鎖中臺的數(shù)據(jù)防漏與領(lǐng)域解耦

在服務(wù)于大型婚慶策劃與影樓連鎖的系統(tǒng)中,隨著業(yè)務(wù)規(guī)模的擴張,早期“快跑”階段留下的 CRUD 系統(tǒng)必然面臨兩大生死考驗:一是多角色、長生命周期的訂單流轉(zhuǎn)導(dǎo)致代碼邏輯極度耦合(大泥球);二是系統(tǒng)權(quán)限粗放導(dǎo)致的客源泄露和員工飛單。本文將深度…

2026/7/31 5:04:57 閱讀更多
構(gòu)建Fiddler與Burp Suite移動端流量分析矩陣:安卓應(yīng)用安全測試與調(diào)試實戰(zhàn)

構(gòu)建Fiddler與Burp Suite移動端流量分析矩陣:安卓應(yīng)用安全測試與調(diào)試實戰(zhàn)

1. 項目概述:為什么需要移動端流量分析矩陣?在移動應(yīng)用安全評估和日常開發(fā)調(diào)試中,流量分析是洞察應(yīng)用行為、發(fā)現(xiàn)潛在漏洞、優(yōu)化網(wǎng)絡(luò)性能的核心手段。很多開發(fā)者或安全研究員習(xí)慣單獨使用Fiddler或Burp Suite,但這兩款工具各有側(cè)重…

2026/7/31 5:04:57 閱讀更多
高效團隊建設(shè)的核心要素與實踐方法

高效團隊建設(shè)的核心要素與實踐方法

1. 團隊建設(shè)的核心價值與挑戰(zhàn)在當(dāng)今快節(jié)奏的工作環(huán)境中,團隊建設(shè)已經(jīng)從"可有可無"的軟技能變成了決定項目成敗的關(guān)鍵因素。我經(jīng)歷過太多這樣的場景:一群技術(shù)大牛組成的團隊,因為缺乏有效協(xié)作,最終交付成果遠(yuǎn)低于預(yù)期&am…

2026/7/31 5:04:57 閱讀更多
大模型架構(gòu)設(shè)計:主流方案與實戰(zhàn)指南

大模型架構(gòu)設(shè)計:主流方案與實戰(zhàn)指南

1. 大模型架構(gòu)設(shè)計全景概覽最近兩年,大模型架構(gòu)設(shè)計領(lǐng)域呈現(xiàn)出百花齊放的態(tài)勢。從DeepSeek R1到Kimi K2,各家機構(gòu)都在探索最適合自身業(yè)務(wù)場景和技術(shù)路線的架構(gòu)方案。作為一名長期跟蹤大模型技術(shù)演進的從業(yè)者,我發(fā)現(xiàn)當(dāng)前主流架構(gòu)已經(jīng)形成了幾個…

2026/7/31 5:04:57 閱讀更多
HART協(xié)議詳解:05 HART現(xiàn)場通信實戰(zhàn)

HART協(xié)議詳解:05 HART現(xiàn)場通信實戰(zhàn)

第五季 HART現(xiàn)場通信實戰(zhàn) ——從USB-HART Modem抓包到工程診斷:讓協(xié)議知識變成維修能力 各位工業(yè)現(xiàn)場的工程師朋友們,大家好! 經(jīng)過前四季的系統(tǒng)學(xué)習(xí),我們已經(jīng)構(gòu)建了HART協(xié)議的完整理論框架: 第一季:六層生命模型與本質(zhì)認(rèn)知 第二季:物理層4–20mA與FSK魔法 第三季:數(shù)…

2026/7/31 0:14:40 閱讀更多
維修工程師的示波器實戰(zhàn):02 探頭地線——示波器最大的“坑”

維修工程師的示波器實戰(zhàn):02 探頭地線——示波器最大的“坑”

第二篇:探頭地線——示波器最大的“坑” ——那根不起眼的小地線,可能比你測的信號還重要 很多工程師第一次用示波器時,都會經(jīng)歷這樣一個“驚魂”時刻。 某食品廠包裝線,伺服偶發(fā)報警。年輕工程師判斷是編碼器信號受干擾,便拿出示波器認(rèn)真測量。波形一出來,所有人都倒…

2026/7/31 0:14:40 閱讀更多