C語言數(shù)組全面總結(jié)梳理
數(shù)組(array)是由一系列類型相同的元素構(gòu)成。
一般形式:
類型 數(shù)組名 [常量表達式]
一,一維數(shù)組
1.創(chuàng)建和初始化
創(chuàng)建一堆相同元素的集合,以整型為例:
//創(chuàng)建大小為8的整型數(shù)組 int arr1[8]; // []里面應(yīng)放常量,因此若: int num=8; //則有: arr2[num]; num為變量,創(chuàng)建失敗 // 此時 arr1 != arr2
初始化就是合理賦值,有多種方式,合理即可:
//指定大小的初始化 int arr1[3]={1,2,3}; //不指定大小的初始化 int arr2[]={1,2,3}; //指定大小的不完全初始化 int arr3[3]={1,2};
這里創(chuàng)建字符數(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é)束標志)結(jié)束讀取,且打印出的個數(shù)里不算字符'\0'.
arr1字符串末尾f后面默認有結(jié)束標志,而arr2字符f后面無結(jié)束標志,為隨機值,strlen必須讀取到'\0'才會結(jié)束讀取,因此讀取到的為隨機數(shù)。
//改寫arr2為: char arr2[] = {'a','b','c','d','e','f','\0'};
那么結(jié)果:
2.使用下標訪問
數(shù)組是用 [] 來進行下標訪問的,數(shù)組下標從0開始。
如: arr1[3]={1,2,3};
則數(shù)據(jù)的下標為: 0 1 2 一一對應(yīng)
寫個栗子,分別打印 int arr2[5]={1,2,3,4,5};
的每個元素
注:int sz = sizeof(arr2) / sizeof(arr2[0]);
//通過字節(jié)計算元素個數(shù),確定判斷條件 因為已經(jīng)知道了元素個數(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é)計算元素個數(shù),確定判斷條件 for (i = 0; i < sz; i++) { printf("%d ",arr2[i]); 下標從0開始,依次訪問每個元素 } return; }
3.在內(nèi)存中的存儲
由上面的栗子我們直接打印數(shù)組每個元素的內(nèi)存:
觀察不難發(fā)現(xiàn)每個元素間相差四個字節(jié),且地址由低到高。
得到結(jié)論:數(shù)組在內(nèi)存中是連續(xù)存放的。
二,二維數(shù)組
1.創(chuàng)建和初始化
一般形式:
類型 數(shù)組名 [常量表達式][常量表達式]
//數(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.使用下標訪問
二維數(shù)組的訪問就很有意思 將二維數(shù)組看成行列 用坐標來訪問
以 int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
三行四列 為例:
注:列和行的下標都是從0開始
比如我們想打印6,那么應(yīng)該是arr1[1][1],而不是arr1[2][2].
3.在內(nèi)存中的存儲
繼續(xù)以arr1為例:
地址依舊是連續(xù)的,由低地址到高地址。
三,越界問題
例如:
創(chuàng)建一個數(shù)組 int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
訪問時行不能<0 或 >=3,列不能<0 或 >=4,否則就是數(shù)組越界。
編譯代碼時,越界不一定會報錯,注意自己檢查。
到此這篇關(guān)于C語言數(shù)組全面總結(jié)梳理的文章就介紹到這了,更多相關(guān)C語言 數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)之模式匹配字符串定位問題
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之模式匹配字符串定位問題的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解這部分內(nèi)容,需要的朋友可以參考下2017-10-10C++函數(shù)返回值為對象時,構(gòu)造析構(gòu)函數(shù)的執(zhí)行細節(jié)
C++函數(shù)返回值為對象時,構(gòu)造析構(gòu)函數(shù)的執(zhí)行細節(jié),需要的朋友,可以參考下2013-02-02C/C++產(chǎn)生指定范圍和不定范圍隨機數(shù)的實例代碼
C/C++產(chǎn)生隨機數(shù)用到兩個函數(shù)rand() 和 srand(),這里介紹不指定范圍產(chǎn)生隨機數(shù)和指定范圍產(chǎn)生隨機數(shù)的方法代碼大家參考使用2013-11-11