網(wǎng)站首頁 編程語言 正文
數(shù)組(array)是由一系列類型相同的元素構(gòu)成。
一般形式:
類型? ? ?數(shù)組名? [常量表達(dá)式]
一,一維數(shù)組
1.創(chuàng)建和初始化
創(chuàng)建一堆相同元素的集合,以整型為例:
//創(chuàng)建大小為8的整型數(shù)組 int arr1[8]; // []里面應(yīng)放常量,因此若: int num=8; //則有: arr2[num]; num為變量,創(chuàng)建失敗 // 此時(shí) arr1 != arr2
初始化就是合理賦值,有多種方式,合理即可:
//指定大小的初始化 int arr1[3]={1,2,3}; //不指定大小的初始化 int arr2[]={1,2,3}; //指定大小的不完全初始化 int arr3[3]={1,2};
這里創(chuàng)建字符數(shù)組時(shí)應(yīng)注意這種情況:
char arr1[] = {"abcdef"}; char arr2[] = {'a','b','c','d','e','f'};
這兩種初始化看著內(nèi)容相同,但 arr1 不等同于 arr2,這里我們用 strlen函數(shù) 分別求他們的字符串長度:
arr1是我們能想到的,但是arr2卻超出預(yù)料,原因是strlen遇到字符'\0'?('\0'為結(jié)束標(biāo)志)結(jié)束讀取,且打印出的個(gè)數(shù)里不算字符'\0'.
arr1字符串末尾f后面默認(rèn)有結(jié)束標(biāo)志,而arr2字符f后面無結(jié)束標(biāo)志,為隨機(jī)值,strlen必須讀取到'\0'才會(huì)結(jié)束讀取,因此讀取到的為隨機(jī)數(shù)。
//改寫arr2為: char arr2[] = {'a','b','c','d','e','f','\0'};
那么結(jié)果:
2.使用下標(biāo)訪問
數(shù)組是用 [] 來進(jìn)行下標(biāo)訪問的,數(shù)組下標(biāo)從0開始。
? ?如:? ? ? ?arr1[3]={1,2,3};
則數(shù)據(jù)的下標(biāo)為:? 0 1 2? ? ? ? 一一對應(yīng)
寫個(gè)栗子,分別打印 int arr2[5]={1,2,3,4,5};
的每個(gè)元素
注:int sz = sizeof(arr2) / sizeof(arr2[0]);
? //通過字節(jié)計(jì)算元素個(gè)數(shù),確定判斷條件 因?yàn)橐呀?jīng)知道了元素個(gè)數(shù)里可省略 直接令 i<5.
#include <stdio.h> int main() { int i = 0; int arr2[5] = { 1, 2, 3, 4, 5 }; //創(chuàng)建數(shù)組arr2并初始化 int sz = sizeof(arr2) / sizeof(arr2[0]); //通過字節(jié)計(jì)算元素個(gè)數(shù),確定判斷條件 for (i = 0; i < sz; i++) { printf("%d ",arr2[i]); 下標(biāo)從0開始,依次訪問每個(gè)元素 } return; }
3.在內(nèi)存中的存儲(chǔ)
由上面的栗子我們直接打印數(shù)組每個(gè)元素的內(nèi)存:
觀察不難發(fā)現(xiàn)每個(gè)元素間相差四個(gè)字節(jié),且地址由低到高。
得到結(jié)論:數(shù)組在內(nèi)存中是連續(xù)存放的。
二,二維數(shù)組?
1.創(chuàng)建和初始化
一般形式:
類型? ? ?數(shù)組名? [常量表達(dá)式][常量表達(dá)式]
//數(shù)組創(chuàng)建 int arr[3][4]; //三行四列 char arr[3][6]; //三行六列
一維是單行,這里可將二維理解為行列
初始化也與一維數(shù)組沒多少差別:
//指定大小的初始化 int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //不指定大小的初始化,(行可不指定,但列不可省略,必須指定) int arr2[][6]={1,2,3}; int arr3[][4]={{1,2},{3,4},5,6,7,8,9}; //賦值中{}里面的{}可代表一行的內(nèi)容 //指定大小的不完全初始化 int arr4[3][2]={1,2,3};
不完全初始化的值為0
2.使用下標(biāo)訪問
二維數(shù)組的訪問就很有意思? ?將二維數(shù)組看成行列 用坐標(biāo)來訪問
以? int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
? ?三行四列? 為例:
注:列和行的下標(biāo)都是從0開始
比如我們想打印6,那么應(yīng)該是arr1[1][1],而不是arr1[2][2].
3.在內(nèi)存中的存儲(chǔ)
繼續(xù)以arr1為例:
地址依舊是連續(xù)的,由低地址到高地址。
三,越界問題
例如:
創(chuàng)建一個(gè)數(shù)組? int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
? 訪問時(shí)行不能<0 或 >=3,列不能<0 或 >=4,否則就是數(shù)組越界。
編譯代碼時(shí),越界不一定會(huì)報(bào)錯(cuò),注意自己檢查。
原文鏈接:https://blog.csdn.net/weixin_53316121/article/details/121198747
相關(guān)推薦
- 2022-03-22 C++實(shí)現(xiàn)簡易選課系統(tǒng)代碼分享_C 語言
- 2022-03-06 正則表達(dá)式用法詳解_正則表達(dá)式
- 2022-04-19 Django的開發(fā)步驟原來是這樣的_python
- 2022-11-19 Django項(xiàng)目中表的查詢的操作_python
- 2023-06-18 聚星C#數(shù)字信號(hào)處理工具包頻譜分析的用法_C#教程
- 2022-06-07 教你使用Jenkins集成Harbor自動(dòng)發(fā)布鏡像_docker
- 2022-05-08 關(guān)于PyQt5中QtGui.QImage圖片顯示問題解析_python
- 2022-06-13 ASP.NET?Core依賴注入(DI)講解_實(shí)用技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支