日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

C語言數(shù)組全面總結(jié)梳理_C 語言

作者:i跑跑 ? 更新時(shí)間: 2022-04-18 編程語言

數(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

欄目分類
最近更新