成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

詳細(xì)講解 —— 數(shù)組(C語(yǔ)言初階)

Backache / 3690人閱讀

摘要:也可以理解成二維數(shù)組有三個(gè)元素,每個(gè)元素是一個(gè)一維數(shù)組我們可以把二維數(shù)組想象成一個(gè)幾行幾列的數(shù)組但是本質(zhì)上的二維數(shù)組是一列的。數(shù)組名,計(jì)算整個(gè)數(shù)組的大小,內(nèi)部多帶帶放一個(gè)數(shù)組名,數(shù)組名表示整個(gè)數(shù)組。數(shù)組名,數(shù)組名表示整個(gè)數(shù)組。

目錄

1. 一維數(shù)組

1.1?數(shù)組的創(chuàng)建和初始化

數(shù)組的創(chuàng)建:

數(shù)組的初始化

1.2?一維數(shù)組的使用

1.3 一維數(shù)組在內(nèi)存中的存儲(chǔ)

1.4 了解數(shù)組在存儲(chǔ)中的本質(zhì)

2. 二維數(shù)組

2.1 二維數(shù)組的創(chuàng)建和初始化

二維數(shù)組的創(chuàng)建

二維數(shù)組的初始化

2.2?二維數(shù)組的使用

2.3?二維數(shù)組在內(nèi)存中的存儲(chǔ)

2.4 了解數(shù)組在存儲(chǔ)中的本質(zhì)

3. 數(shù)組越界

4. 數(shù)組作為函數(shù)參數(shù)

4.1?數(shù)組名是什么?

?4.2?冒泡排序函數(shù)的設(shè)計(jì)

5. 數(shù)據(jù)實(shí)例:

5.1 數(shù)組的應(yīng)用實(shí)例1:三子棋

5.2 數(shù)組的應(yīng)用實(shí)例2:掃雷游戲


1. 一維數(shù)組。

1.1?數(shù)組的創(chuàng)建和初始化

數(shù)組的創(chuàng)建:

數(shù)組是創(chuàng)建一組相同類(lèi)型元素的集合。

數(shù)組的創(chuàng)建方式:

int   arr   [常量表達(dá)式];//int是指數(shù)組的元素類(lèi)型,也可以是float,char這種類(lèi)型。//在arr[]在[]中放的是常量表達(dá)式//在C99之前 —— arr[]中時(shí)不能用變量的,要用常量。

數(shù)組創(chuàng)建的實(shí)例:

char arr1[10];float arr2[1];double arr3[20];

數(shù)組的初始化

如果只是創(chuàng)建數(shù)組(不初始化),然后使用數(shù)組,編譯器就會(huì)報(bào)錯(cuò),因?yàn)閿?shù)組的值是不知道的。

數(shù)組的初始化是指,在創(chuàng)建數(shù)組的同時(shí)給數(shù)組的內(nèi)容一些合理初始值(初始化)。

#includeint main(){	//三種常見(jiàn)的初始化方式	int arr1[20] = { 1,2,3 };//這個(gè)數(shù)組的空間大小是20*4個(gè)字節(jié),前三個(gè)元素的值為1,2,3,其他的值默認(rèn)為0 —— 不完全初始化	int arr2[] = { 1,2,3 };//這個(gè)數(shù)組的初始化雖然沒(méi)有給元素個(gè)數(shù),但是C語(yǔ)言的語(yǔ)法還是支持的,元素的個(gè)數(shù)是根據(jù){}中元素個(gè)數(shù)來(lái)給的//{}中有幾個(gè)元素,這個(gè)數(shù)組的空間大小就是多少 —— 空間大小為3*4個(gè)字節(jié)	int arr3[3] = { 1,2,3 };//完全初始化	//理解下面三種數(shù)組初始化的含義	char arr4[] = "abc";//這個(gè)數(shù)組的空間大小為4個(gè)字節(jié),其中存放的是a b c /0 —— 字符串后面默認(rèn)有一個(gè)/0?!伞啊币鸬膬?nèi)容//為字符串	char arr5[] = { "a", "b", "c" };//這個(gè)數(shù)組的空間大小為3個(gè)字節(jié),其中存放的是a b c	char arr6[] = { "a", 98, "c" };//因?yàn)閿?shù)據(jù)類(lèi)型為char類(lèi)型的,所以98代表的是b,b的ASCII值為98	return 0;}

1.2?一維數(shù)組的使用

對(duì)于數(shù)組的使用我們之前介紹了一個(gè)操作符:

[ ] ,下標(biāo)引用操作符 —— 它其實(shí)就數(shù)組訪問(wèn)的操作符。

#include int main(){    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };   //數(shù)組的不完全初始化    int sz = sizeof(arr) / sizeof(arr[0]);   //計(jì)算數(shù)組的元素個(gè)數(shù)    //對(duì)數(shù)組內(nèi)容賦值,數(shù)組是使用下標(biāo)來(lái)訪問(wèn)的,下標(biāo)從0開(kāi)始    printf("%d/n", arr[4]);   //打印數(shù)字5;    int i = 0;    //利用循環(huán)打印數(shù)組的內(nèi)容    for (i = 0; i < sz; i++)    {        printf("%d ", arr[i]);    }    return 0;}

總結(jié):

1. 數(shù)組是使用下標(biāo)來(lái)訪問(wèn)的,下標(biāo)是從0開(kāi)始。

2. 數(shù)組的大小可以通過(guò)計(jì)算得到。

1.3 一維數(shù)組在內(nèi)存中的存儲(chǔ)

代碼:

#include int main(){	int arr[10] = { 0 };	int i = 0;	//計(jì)算數(shù)組中的元素個(gè)數(shù)	int sz = sizeof(arr) / sizeof(arr[0];	//打印數(shù)組元素的地址	for (i = 0; i < sz; ++i)	{		printf("&arr[%d] = %p/n", i, &arr[i]);	}	return 0;}

結(jié)果:

?結(jié)論:

從結(jié)果中我們可以看出來(lái):隨著一維數(shù)組下標(biāo)的增長(zhǎng),元素的地址,也在有規(guī)律的遞增 —— (1)數(shù)組在內(nèi)存中是連續(xù)存放的? —— (2)數(shù)組中的地址是由高到低排序的

1.4 了解數(shù)組在存儲(chǔ)中的本質(zhì)

數(shù)組在內(nèi)存中的本質(zhì):

(1)數(shù)組在內(nèi)存中是連續(xù)存放的?

(2)數(shù)組中的地址是由高到低排序的

代碼舉例:

//打印數(shù)組中的內(nèi)容#includeint main(){	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };	int i = 0;	int sz = sizeof(arr) / sizeof(arr[0]);	int* p = arr; //定義指針變量為int類(lèi)型//普通做法	for (i = 0; i < sz; i++)	{		printf("%d ", arr[i]);	}	printf("/n");//利用數(shù)組在內(nèi)存中是連續(xù)存放的規(guī)律	for (i = 0; i < sz; i++)	{		printf("%d ", *p);		p++;  //指針變量+1表示,跳過(guò)一個(gè)整型空間	}	return 0;}

2. 二維數(shù)組

2.1 二維數(shù)組的創(chuàng)建和初始化

二維數(shù)組的創(chuàng)建

int arr[3][4];char arr[3][5];double arr[2][4];

二維數(shù)組的初始化

//1int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10};

//2int arr[3][4] = { {1,2},{4,5} };

//3int arr[][4] = { {2,3},{4,5} };//二維數(shù)組初始化了,可以省略列數(shù)下標(biāo),但是不能省略行數(shù)下標(biāo)
//4char ch[3][4] = { "abc","bcd" };

2.2?二維數(shù)組的使用

二維數(shù)組的使用也是通過(guò)下標(biāo)的方式。

#include int main(){   int arr[3][4] = {0};   int i = 0;//對(duì)arr數(shù)組初始化賦值   for(i=0; i<3; i++)   {      int j = 0;      for(j=0; j<4; j++)      {         arr[i][j] = i*4+j;      }   }//打印arr數(shù)組的內(nèi)容   for(i=0; i<3; i++)   {      int j = 0;      for(j=0; j<4; j++)      {         printf("%d ", arr[i][j]);      }   }   return 0;}

2.3?二維數(shù)組在內(nèi)存中的存儲(chǔ)

像一維數(shù)組一樣,這里我們嘗試打印二維數(shù)組的每個(gè)元素的內(nèi)存地址

#include int main(){	int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12,};	int i = 0;//打印數(shù)組arr的每一個(gè)元素的地址	for (i = 0; i < 3; i++)	{		int j = 0;		for (j = 0; j < 4; j++)		{			printf("&arr[%d][%d] = %p/n", i, j, &arr[i][j]);		}  //%p —— 是打印地址	}	return 0;}

?從上面的結(jié)果就可以看出:二維數(shù)組在內(nèi)存中也是連續(xù)存儲(chǔ)的。

也可以理解成:二維數(shù)組有三個(gè)元素,每個(gè)元素是一個(gè)一維數(shù)組

?我們可以把二維數(shù)組想象成一個(gè)幾行幾列的數(shù)組

但是本質(zhì)上的二維數(shù)組是一列的。 ———— 如上圖

2.4 了解數(shù)組在存儲(chǔ)中的本質(zhì)

數(shù)組內(nèi)存的本質(zhì):

(1)數(shù)組在內(nèi)存中是連續(xù)存放的?

(2)數(shù)組中的地址是由高到低排序的

代碼舉例:

#includeint main(){	int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };	int i = 0;	int* p = arr;	//普通的打印方式	for (i = 0; i < 3; i++)	{		int j = 0;		for (j = 0; j < 4; j++)		{			printf("%d ", arr[i][j]);		}	}	printf("/n");	//利用本質(zhì)來(lái)打印數(shù)組	for (i = 0; i < 12; i++)	{		printf("%d ", *p);		p++;	}	return 0;}

3. 數(shù)組越界

數(shù)組的下標(biāo)是有范圍限制的。

數(shù)組的下標(biāo)規(guī)定是從0開(kāi)始的,如果輸入有n個(gè)元素,最后一個(gè)元素的下標(biāo)就是n-1。

所以數(shù)組的下標(biāo)如果小于0,或者大于n-1,就是數(shù)組越界訪問(wèn)了,超出了數(shù)組合法空間的訪問(wèn)。

C語(yǔ)言本身是不做數(shù)組下標(biāo)的越界檢查,編譯器也不一定報(bào)錯(cuò),但是編譯器不報(bào)錯(cuò),并不意味著程序就 是正確的,所以程序員寫(xiě)代碼時(shí),最好自己做越界的檢查。

代碼舉例:

#includeint main(){	int arr[5] = { 1,2,3,4,5 };	int i = 0;	for (i = 0; i <= 5; i++)  //其中的arr[5]越界訪問(wèn)了	{		printf("%d ", arr[i]);	}	return 0;}

?從上圖可知,越界訪問(wèn)的值是系統(tǒng)給的隨機(jī)值。

?二維數(shù)組的行和列也可能存在越界 —— 在這里就不多講了

4. 數(shù)組作為函數(shù)參數(shù)

4.1?數(shù)組名是什么?

#include int main(){    int arr[10] = { 1,2,3,4,5 };    printf("%p/n", arr);    printf("%p/n", arr+1);    printf("%p/n", &arr[0]);    printf("%d/n", *arr);    //輸出結(jié)果    return 0;}

?從上面就可以看出:數(shù)組名是首元素的地址

有兩種例外的情況:數(shù)組名不是首元素的地址。

1. sizeof(數(shù)組名),計(jì)算整個(gè)數(shù)組的大小,sizeof內(nèi)部多帶帶放一個(gè)數(shù)組名,數(shù)組名表示整個(gè)數(shù)組。

2. &數(shù)組名,取出的是數(shù)組的地址。&數(shù)組名,數(shù)組名表示整個(gè)數(shù)組。

除此1,2兩種情況之外,所有的數(shù)組名都表示數(shù)組首元素的地址。

代碼演示:?

#include int main(){    int arr[10] = { 1,2,3,4,5 };    printf("%p/n", arr);    printf("%p/n", &arr);    printf("----------/n");    printf("%p/n", arr + 1);    printf("%p/n", &arr + 1);    return 0;}

?從結(jié)果中我們可以看到:

arr的地址加一 —— 數(shù)組的地址跳過(guò) 4

&arr的地址加一 —— 數(shù)組的地址跳過(guò) 40。

有不同的結(jié)果是因?yàn)椋?span style="color:#fe2c24;">&arr表示的是整個(gè)數(shù)組的地址,arr表示的是數(shù)組第一個(gè)元素的地址

?4.2?冒泡排序函數(shù)的設(shè)計(jì)

冒泡排序的原理:

冒泡排序代碼:?

#includevoid Sort(int arr[], int sz){	int i = 0;	//每趟冒泡排序	for (i = 0; i < sz - 1; i++)	{		int j = 0;		//一趟冒泡排序		for (j = 0; j < sz - i - 1; j++)		{			if (arr[j] > arr[j + 1])			{                //交換				int tem = arr[j];				arr[j] = arr[j + 1];				arr[j + 1] = tem;			}		}	}}void Print(int arr[], int sz){	int i = 0;	for (i = 0; i < sz; i++)	{		printf("%d ", arr[i]);	}}int main(){	int arr[10] = { 7,8,9,4,5,6,1,2,3 };	int sz = sizeof(arr) / sizeof(arr[0]);	//冒泡排序	Sort(arr, sz);	//打印數(shù)組的內(nèi)容	Print(arr, sz);	return 0;}

5. 數(shù)據(jù)實(shí)例:

5.1 數(shù)組的應(yīng)用實(shí)例1:三子棋

解析 —— 以前我寫(xiě)過(guò)的一篇博客連接如下:

三子棋小游戲:? ?https://blog.csdn.net/IT_Infector/article/details/119216692

5.2 數(shù)組的應(yīng)用實(shí)例2:掃雷游戲

解析 —— 以前我寫(xiě)過(guò)的一篇博客連接如下:

掃雷小游戲:? ?https://blog.csdn.net/IT_Infector/article/details/119224857???????

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119301.html

相關(guān)文章

  • C語(yǔ)言學(xué)習(xí)筆記—P15(指針<初階>+圖解+題例)

    摘要:變量占用個(gè)字節(jié)的空間,這里是將的個(gè)字節(jié)的第一個(gè)字節(jié)的地址存放在變量中,就是一個(gè)之指針變量。是指針變量作者新曉故知總結(jié)指針變量,用來(lái)存放地址的變量。 目錄 前言:●由于作者水平有限,文章難免存在謬誤之處,敬請(qǐng)讀者斧正,俚語(yǔ)成篇,懇望指教! ???????? ? ? ?? ? ? ? ? ? ...

    weknow619 評(píng)論0 收藏0
  • C語(yǔ)言初階學(xué)習(xí)——掃雷小游戲(遞歸)

    摘要:目錄前言前言前期的準(zhǔn)備前期的準(zhǔn)備游戲代碼的具體實(shí)現(xiàn)游戲代碼的具體實(shí)現(xiàn)完整版的掃雷小游戲代碼完整版的掃雷小游戲代碼總結(jié)總結(jié)前言掃雷是一款大眾類(lèi)的益智小游戲,于年發(fā)行。 目錄 前言 前期的準(zhǔn)備 游戲代碼的具體實(shí)現(xiàn) 1、text.c 2、game.h 3、game.c 完整版的掃雷小游戲代碼: 1...

    zhonghanwen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<