學益得線上課堂
從基礎學習嵌入式
玩轉智能硬件、斬獲高薪offer
爲什麼需要數組
有的時候我們需要定義好多個同類型的變量,比如:
int a;
int b;
int c;
int d;
int e;
這樣寫代碼語法上沒有問題,但是變量個數太多,容易混淆,而且代碼的可讀性太差,不知道每個變量是什麼意思。所以在C語言裏面可以使用數組來表示同類型的多個變量。
定義數組
定義方式如下:
int a[10];
含義:數組名是a,有10個元素,每個元素都是整形。
注意:數組在定義的時候,元素個數必須是確定的,所以[]裏面必須是常量而不是變量。
數組初始化
常見的初始化方法有如下幾種:
int a[5] = {1, 2, 3, 4, 5}; //初始化所有數據
int a[5] = {1, 2, 3}; //初始化部分數據,未初始化的是0
int a[5]; //不初始化,所有數據都是垃圾值
int a[] = {1, 2, 3, 4, 5}; //沒有長度,編譯器根據數組元素確定
int a[5] = {0}; //所有數據初始化成0
在定義數組的時候養成初始化的習慣,尤其是字符數組,保證所有數據都在可控制的範圍內。
數組在內存中的存儲
數組在內存中從低地址到高地址排列,即第一個元素在低地址,最後一個元素在高地址。如果是整型數組:
因爲是整型元素,所以每個元素佔了四個字節。如果是字符數組,每個元素佔1個字節。但是,在內存中的排列都是從低地址到高地址。
數組名
先來看個代碼:
#include <stdio.h>
int main()
{
int a[5] = {1, 2, 3, 4, 5};
printf("%p\n", a); //地址的方式打印數組名
printf("%p\n", &a); //地址的方式打印數組名的地址
printf("%p\n", a + 1); //分別+1,看下區別
printf("%p\n", &a + 1);
return 0;
}
運行結果:
可以得出幾個結論:
- 數組名就是地址,是數組首元素(第一個元素)地址;數組名也是常指針(值不能修改的指針);
- 數組名加一可以得到下一個元素的地址;
- &a是數組的地址,數值和a一樣,但是含義不一樣,a代表的是第一個元素,&a代表的是整個數組。
冒泡排序
最後附上冒泡排序的代碼,通過這個代碼可以搞懂數組的使用。
#include <stdio.h>
int main()
{
int a[10] = {0};
printf("請輸入10個數字:\n");
int i, j;
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
scanf("%d", &a[i]);
}
for (i = 0; i < sizeof(a) / sizeof(a[0]) - 1; i++)
{
for (j = 0; j < sizeof(a) / sizeof(a[0]) - i - 1; j++)
{
if (a[j] < a[j + 1])
{
#if 0
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
#endif
a[j] = a[j] + a[j + 1];
a[j + 1] = a[j] - a[j + 1];
a[j] = a[j] - a[j + 1];
}
}
}
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
更多視頻、文章、嵌入式學習資源,微信關注 【學益得智能硬件】