數(shù)組是一組相同類型元素的集合
目前創(chuàng)新互聯(lián)建站已為近千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、興國網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
數(shù)組的創(chuàng)建:數(shù)組的元素類型 + 數(shù)組名 + [ 數(shù)組大小 ]
數(shù)組元素類型 + [ 數(shù)組大小 ],就是數(shù)組類型
//代碼1
int arr1[10]; //int[10]就是數(shù)組arr1的類型
//代碼2
int count = 10;
int arr2[count]; //VS中數(shù)組大小只能是常量,不能是變量
//代碼3
char arr3[10];
float arr4[1];
double arr5[20];
2、數(shù)組的初始化注:數(shù)組創(chuàng)建,在C99標(biāo)準(zhǔn)之前, [ ] 中要給一個(gè)常量才可以,不能使用變量。在C99標(biāo)準(zhǔn)支持了變長數(shù)組的概念,數(shù)組的大小可以使用變量指定,但是變長數(shù)組不能初始化。
- 數(shù)組的初始化是指,在創(chuàng)建數(shù)組的同時(shí)給數(shù)組的內(nèi)容一些合理初始值(初始化)
- 數(shù)組在創(chuàng)建的時(shí)候如果想不指定數(shù)組的確定的大小就得初始化。數(shù)組的元素個(gè)數(shù)根據(jù)初始化的內(nèi)容來確定。
整型數(shù)組:
int arr1[5] = {1,2,3,4,5};//完全初始化
int arr2[10] = {1,2,3}; //不完全初始化,剩余的默認(rèn)初始化為0
int arr3[] = {1,2,3,4}; //若數(shù)組初始化了,可以不指定數(shù)組大小,數(shù)組大小由初始化內(nèi)容決定
字符數(shù)組:
char arr4[3] = {'a',98, 'c'}; //98被當(dāng)作ASCII碼值存儲(chǔ),相當(dāng)于 {'a','b','c'}
char arr5[5] = {'a','b','c'}; //不完全初始化,剩余的默認(rèn)初始化為0,0又是\0的ASCII碼值,故相當(dāng)于{'a','b','c','\0','\0'}
char arr6[8] = "abcdef"; //字符數(shù)組,存字符的,也可以用字符串表示。其中abcdef\0這7位都來自字符串,最后一位的\0為默認(rèn)的初始化
注:區(qū)分下面代碼的內(nèi)存分配。
char arr1[] = "abc"; // arr1[4]
char arr2[] = {'a','b','c'}; //arr2[3]
printf("%s\n", arr1); //3
printf("%s\n", arr2); //隨機(jī)值,沒有遇到\0
3、一維數(shù)組的使用數(shù)組元素類型 + [ 數(shù)組大小 ],就是數(shù)組類型。
通過數(shù)組名或數(shù)組類型求出來的是數(shù)組大小。
int arr[10] = {1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", sizeof(arr)); //40
printf("%d\n", sizeof(int[10])); //40
#includeint main()
{int arr[10] = {0 }; //數(shù)組的不完全初始化
//計(jì)算數(shù)組的元素個(gè)數(shù)
int sz = sizeof(arr) / sizeof(arr[0]);
//對(duì)數(shù)組arr進(jìn)行初始化
int i = 0;
for (i = 0; i< 10; i++)
{arr[i] = i;
}
//輸出數(shù)組的內(nèi)容
for (i = 0; i< 10; i++)
{printf("%d ", arr[i]); //0 1 2 3 4 5 6 7 8 9
}
return 0;
}
4、一維數(shù)組在內(nèi)存中的存儲(chǔ)打印地址 - %p
隨著數(shù)組下標(biāo)的增長,元素的地址,也在有規(guī)律的遞增。【由此可以得出結(jié)論:數(shù)組在內(nèi)存中是連續(xù)存放的】
2、二維數(shù)組的創(chuàng)建和初始化 1、二維數(shù)組的創(chuàng)建什么類型的指針,+1,就跳過一個(gè)什么類型的元素
下圖:p+1 跳過一個(gè) int 型元素
//數(shù)組創(chuàng)建
int arr[3][4];
char arr[3][5];
double arr[2][4];
2、二維數(shù)組的初始化//數(shù)組初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}}; //二維數(shù)組如果有初始化,行可以省略,列不能省略
3、二維數(shù)組的使用#includeint main()
{int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12 };
//打印數(shù)組
for (i = 0; i< 3; i++) //行 0 1 2
{int j = 0;
for (j = 0; j< 4; j++) //列 0 1 2 3
{ printf("%2d ", arr[i][j]); //%2d,每個(gè)數(shù)打印兩位,右對(duì)齊
}
printf("\n");
}
return 0;
}
4、二維數(shù)組在內(nèi)存中的存儲(chǔ)注:
- %2d,每個(gè)數(shù)打印兩位,右對(duì)齊
- %-2d,每個(gè)數(shù)打印兩位,左對(duì)齊
通過結(jié)果我們可以分析到,其實(shí)二維數(shù)組在內(nèi)存中也是連續(xù)存儲(chǔ)的。
#define _CRT_SECURE_NO_WARNINGS 1
#includeint main()
{int arr[3][4];
int i = 0;
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]);
}
}
return 0;
}
3、數(shù)組越界
- 數(shù)組的下標(biāo)規(guī)定是從0開始,如果數(shù)組有n個(gè)元素,最后一個(gè)元素的下標(biāo)就是n-1。
- 所以數(shù)組的下標(biāo)如果小于0,或者大于n-1,就是數(shù)組越界訪問了,超出了數(shù)組合法空間的訪問。
- C語言本身是不做數(shù)組下標(biāo)的越界檢查,編譯器也不一定報(bào)錯(cuò),但是編譯器不報(bào)錯(cuò),并不意味著程序就是正確的,所以程序員寫代碼時(shí),最好自己做越界的檢查。
#includeint main()
{int arr[10] = {0 };
int i = 0;
for (i = 0; i<= 10; i++) //當(dāng)i=10時(shí)的時(shí)候,越界訪問了
{printf("%d\n", arr[i]);
}
return 0;
}
4、數(shù)組作為函數(shù)參數(shù)1、數(shù)組名是什么?注:
- (1)在函數(shù)的參數(shù)中設(shè)置的數(shù)組,一維數(shù)組可以只寫數(shù)組名,不寫數(shù)組長度。
- (2)在函數(shù)的參數(shù)中設(shè)置的數(shù)組,二維數(shù)組行可以省略,列不能省略。
2、冒泡排序(1)sizeof(數(shù)組名),數(shù)組名如果單獨(dú)放在sizeof內(nèi)部,這里的數(shù)組名表示整個(gè)數(shù)組,計(jì)算的是整個(gè)數(shù)組的大小
(2)&數(shù)組名,這里的數(shù)組名表示整個(gè)數(shù)組,取出的是整個(gè)數(shù)組的地址
(3)除此之外,遇到的所有的數(shù)組名都輸數(shù)組首元素的地址
注:
- 數(shù)組傳參的時(shí)候,形參的部分可以寫成數(shù)組,也可以寫成指針
- 寫成數(shù)組的形式時(shí),數(shù)組大小不用寫【因?yàn)樾螀⒅唤邮樟藬?shù)組首元素地址,壓根不會(huì)創(chuàng)建數(shù)組】
- 寫成指針的形式時(shí),arr[ ]就相當(dāng)于解引用【arr[i] == *(arr+i)】
- 當(dāng)數(shù)組傳參的時(shí)候,實(shí)際上是把數(shù)組的首元素的地址傳過去了,所以【int sz = sizeof(arr) / sizeof(arr[0])】只能在主函數(shù)計(jì)算。若在函數(shù)中計(jì)算,接收地址的arr實(shí)際上是個(gè)指針變量,指針變量( sizeof(arr) )的大小是4或8,【int sz = sizeof(arr) / sizeof(arr[0])】最后計(jì)算的并不是數(shù)組元素個(gè)數(shù)。
#define _CRT_SECURE_NO_WARNINGS 1
#include//實(shí)現(xiàn)將數(shù)組從小到大排序
//int* arr 這里用來接收的數(shù)組本質(zhì)上還是指針
void bubble_sort(int arr[], int sz) //寫成數(shù)組的形式時(shí),數(shù)組大小不用寫
{int i = 0;
//冒泡排序的趟數(shù)
for (i = 0; i< sz - 1; i++) //趟數(shù):元素個(gè)數(shù)-1
{//一趟排序的過程
int j = 0;
for (j = 0; j< sz - 1 - i; j++) //每趟的元素之間互相比較的次數(shù):元素個(gè)數(shù)-1-第幾趟
{ if (arr[j] >arr[j + 1])
{ int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{int arr[] = {3,1,7,5,8,9,0,2,4,6 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
for (int i = 0; i< sz; i++)
{printf("%d ", arr[i]);
}
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧