廈門網(wǎng)站制作公司推薦html制作網(wǎng)頁代碼
?個人主頁:?熬夜學(xué)編程的小林
💗系列專欄:?【C語言詳解】?【數(shù)據(jù)結(jié)構(gòu)詳解】
一維數(shù)組
1、數(shù)組的概念
2、?維數(shù)組的創(chuàng)建和初始化
2.1、數(shù)組創(chuàng)建
2.2、數(shù)組的初始化
2.3、數(shù)組的類型
3、?維數(shù)組的使用
3.1、數(shù)組下標(biāo)
3.2、數(shù)組元素的打印
3.3、數(shù)組的輸入
4、?維數(shù)組在內(nèi)存中的存儲
5、sizeof計算數(shù)組元素個數(shù)
總結(jié)
1、數(shù)組的概念
數(shù)組是?組相同類型元素的集合;
從這個概念中我們就可以發(fā)現(xiàn)2個有價值的信息:
? 數(shù)組中存放的是1個或者多個數(shù)據(jù),但是數(shù)組元素個數(shù)不能為0。
? 數(shù)組中存放的多個數(shù)據(jù),類型是相同的。
數(shù)組分為?維數(shù)組和多維數(shù)組,多維數(shù)組?般比較多見的是?維數(shù)組。
2、?維數(shù)組的創(chuàng)建和初始化
2.1、數(shù)組創(chuàng)建
?維數(shù)組創(chuàng)建的基本語法如下:
type arr_name[常量值];| ? ? ?| ? ? ? ?|?| ? ? ?| ? ? ? ?|
類型名 ?數(shù)組名 ?數(shù)組大小
存放在數(shù)組的值被稱為數(shù)組的元素,數(shù)組在創(chuàng)建的時候可以指定數(shù)組的大小和數(shù)組的元素類型。
? type 指定的是數(shù)組中存放數(shù)據(jù)的類型,可以是: char、short、int、float 等,也可以自定義的類型
? arr_name 指的是數(shù)組名的名字,這個名字根據(jù)實際情況,起的有意義就型。
? [] 中的常量值是用來指定數(shù)組的大小的,這個數(shù)組的大小是根據(jù)實際的需求指定就行。
比如:我們現(xiàn)在想存儲某個班級的20人的數(shù)學(xué)成績,那我們就可以創(chuàng)建?個數(shù)組,如下:
int math[20];
當(dāng)然我們也可以根據(jù)需要創(chuàng)建其他類型和大小的數(shù)組:
char ch[8];
double score[10];
2.2、數(shù)組的初始化
有時候,數(shù)組在創(chuàng)建的時候,我們需要給定?些初始值值,這種就稱為初始化的。
那數(shù)組如何初始化呢?數(shù)組的初始化?般使用大括號,將數(shù)據(jù)放在大括號中。
?
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第?個元素初始化為1,剩余的元素默認(rèn)初始化為0
//錯誤的初始化 - 初始化項太多
int arr3[3] = {1, 2, 3, 4};
2.3、數(shù)組的類型
數(shù)組也是有類型的,數(shù)組算是?種?定義類型,去掉數(shù)組名留下的就是數(shù)組的類型。
指針章節(jié)會詳細(xì)講解數(shù)組類型。
如下:
?
int arr1[10];
int arr2[12];
char ch[5];
arr1數(shù)組的類型是 int [10]
arr2數(shù)組的類型是 int[12]
ch 數(shù)組的類型是 char [5]
3、?維數(shù)組的使用
學(xué)習(xí)了?維數(shù)組的基本語法,?維數(shù)組可以存放數(shù)據(jù),存放數(shù)據(jù)的目的是對數(shù)據(jù)的操作,那我們?nèi)绾问褂?維數(shù)組呢?
3.1、數(shù)組下標(biāo)
C語言規(guī)定數(shù)組是有下標(biāo)的,下標(biāo)是從0開始的,假設(shè)數(shù)組有n個元素,最后?個元素的下標(biāo)是n-1,下標(biāo)就相當(dāng)于數(shù)組元素的編號,如下:
?
int arr[10] = {1,2,3,4,5,6,7,8,9,10};?
在C語言中數(shù)組的訪問提供了?個操作符 [] ,這個操作符叫:下標(biāo)引?操作符。
有了下標(biāo)訪問操作符,我們就可以輕松的訪問到數(shù)組的元素了,比如我們訪問下標(biāo)為7的元素,我們就可以使用 arr[7] ,想要訪問下標(biāo)是3的元素,就可以使用 arr[3] ,如下代碼:
?
#include <stdio.h>
int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,10};?printf("%d\n", arr[7]);//8printf("%d\n", arr[3]);//4return 0;
}
輸出結(jié)果:
3.2、數(shù)組元素的打印
接下來,如果想要訪問整個數(shù)組的內(nèi)容,那怎么辦呢?
只要我們產(chǎn)生數(shù)組所有元素的下標(biāo)就可以了,那我們使用for循環(huán)產(chǎn)生0~9的下標(biāo),接下來使用下標(biāo)訪問就行了。
如下代碼:
#include <stdio.h>
int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,10};?int i = 0;for(i=0; i<10; i++){printf("%d ", arr[i]);}return 0;
}
輸出的結(jié)果:
3.3、數(shù)組的輸入
明白了數(shù)組的訪問,當(dāng)然我們也根據(jù)需求,自己給數(shù)組輸入想要的數(shù)據(jù),如下:
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};?int i = 0;for(i=0; i<10; i++){scanf("%d", &arr[i]);//在每個下標(biāo)中插入數(shù)據(jù)}for(i=0; i<10; i++){printf("%d ", arr[i]);//打印全部數(shù)據(jù)}return 0;
}
輸入輸出結(jié)果:
此處為一次輸入10個數(shù)值,也可以按回車一個個輸入。在scanf一彈有詳細(xì)講解。
4、?維數(shù)組在內(nèi)存中的存儲
有了前面的知識,我們其實使用數(shù)組基本沒有什么障礙了,如果我們要深入了解數(shù)組,我們最好能了解?下數(shù)組在內(nèi)存中的存儲。
依次打印數(shù)組元素的地址
#include <stdio.h>
int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,10};?int i = 0;for(i=0; i<10; i++){printf("&arr[%d] = %p\n", i, &arr[i]);}return 0;
}
此處結(jié)果為VS x86環(huán)境結(jié)果,指針打印的數(shù)值為16進(jìn)制。
%p是指針占位符,打印地址,在printf彈有詳細(xì)講解占位符。
此處用到指針只是為了證明一維數(shù)組是連續(xù)存儲的,指針在后序會詳細(xì)講解。
輸出結(jié)果我們看看:
從輸出的結(jié)果我們分析,數(shù)組隨著下標(biāo)的增長,地址是由小到大變化的,并且我們發(fā)現(xiàn)每兩個相鄰的元素之間相差4(因為?個整型是4個字節(jié))。所以我們得出結(jié)論:數(shù)組在內(nèi)存中是連續(xù)存放的。這就為后期我們使用指針訪問數(shù)組奠定了基礎(chǔ)。
5、sizeof計算數(shù)組元素個數(shù)
在遍歷數(shù)組的時候,我們經(jīng)常想知道數(shù)組的元素個數(shù),那C語言中有辦法使用程序計算數(shù)組元素個數(shù)嗎?
答案是有的,可以使用sizeof。
sizeof 中C語言是?個關(guān)鍵字,是可以計算類型或者變量大小的,其實 sizeof 也可以計算數(shù)組的大小。
比如:
?
#include <stdio.h>
int main()
{int arr[10] = {0};printf("%d\n", sizeof(arr));return 0;
}
這里輸出的結(jié)果是40,計算的是數(shù)組所占內(nèi)存空間的總大小,單位是字節(jié)。
我們又知道數(shù)組中所有元素的類型都是相同的,那只要計算出?個元素所占字節(jié)的個數(shù),數(shù)組的元素個數(shù)就能算出來。這里我們選擇第?個元素算大小就可以。
#include <stdio.h>
int main()
{int arr[10] = {0};printf("%d\n", sizeof(arr[0]));//計算?個元素的??,單位是字節(jié)return 0;
}
接下來就能計算出數(shù)組的元素個數(shù):
#include <stdio.h>
int main()
{int arr[10] = {0};int sz = sizeof(arr)/sizeof(arr[0]);printf("%d\n", sz);return 0;
}
這里的結(jié)果是:10,表示數(shù)組有10個元素。
以后在代碼中需要數(shù)組元素個數(shù)的地方就不用固定寫死了,使用上面的計算,不管數(shù)組怎么變化,計算出的大小也就隨著變化了。
總結(jié)
本篇博客就結(jié)束啦,謝謝大家的觀看,如果公主少年們有好的建議可以留言喔,謝謝大家啦!