亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

Backache / 3730人閱讀

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

目錄

1. 一維數(shù)組

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

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

數(shù)組的初始化

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

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

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

2. 二維數(shù)組

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

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

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

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

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

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

3. 數(shù)組越界

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

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

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

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

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

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


1. 一維數(shù)組。

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

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

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

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

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

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

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

數(shù)組的初始化

如果只是創(chuàng)建數(shù)組(不初始化),然后使用數(shù)組,編譯器就會報錯,因為數(shù)組的值是不知道的。

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

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

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

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

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

#include int main(){    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };   //數(shù)組的不完全初始化    int sz = sizeof(arr) / sizeof(arr[0]);   //計算數(shù)組的元素個數(shù)    //對數(shù)組內(nèi)容賦值,數(shù)組是使用下標(biāo)來訪問的,下標(biāo)從0開始    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)來訪問的,下標(biāo)是從0開始。

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

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

代碼:

#include int main(){	int arr[10] = { 0 };	int i = 0;	//計算數(shù)組中的元素個數(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é)果中我們可以看出來:隨著一維數(shù)組下標(biāo)的增長,元素的地址,也在有規(guī)律的遞增 —— (1)數(shù)組在內(nèi)存中是連續(xù)存放的? —— (2)數(shù)組中的地址是由高到低排序的

1.4 了解數(shù)組在存儲中的本質(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類型//普通做法	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表示,跳過一個整型空間	}	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ù)組的使用也是通過下標(biāo)的方式。

#include int main(){   int arr[3][4] = {0};   int i = 0;//對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)存中的存儲

像一維數(shù)組一樣,這里我們嘗試打印二維數(shù)組的每個元素的內(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的每一個元素的地址	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ù)存儲的。

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

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

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

2.4 了解數(shù)組在存儲中的本質(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ì)來打印數(shù)組	for (i = 0; i < 12; i++)	{		printf("%d ", *p);		p++;	}	return 0;}

3. 數(shù)組越界

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

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

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

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

代碼舉例:

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

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

?二維數(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ù)組名),計算整個數(shù)組的大小,sizeof內(nèi)部多帶帶放一個數(shù)組名,數(shù)組名表示整個數(shù)組。

2. &數(shù)組名,取出的是數(shù)組的地址。&數(shù)組名,數(shù)組名表示整個數(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ù)組的地址跳過 4

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

有不同的結(jié)果是因為:&arr表示的是整個數(shù)組的地址,arr表示的是數(shù)組第一個元素的地址

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

冒泡排序的原理:

冒泡排序代碼:?

#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ù)實例:

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

解析 —— 以前我寫過的一篇博客連接如下:

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

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

解析 —— 以前我寫過的一篇博客連接如下:

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

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/119301.html

相關(guān)文章

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

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

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

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

    zhonghanwen 評論0 收藏0

發(fā)表評論

0條評論

Backache

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<