【嵌入式修煉之路】- C語言第四課之一維數組

學益得線上課堂
從基礎學習嵌入式
玩轉智能硬件、斬獲高薪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;
}

運行結果:

在這裏插入圖片描述
可以得出幾個結論:

  1. 數組名就是地址,是數組首元素(第一個元素)地址;數組名也是常指針(值不能修改的指針);
  2. 數組名加一可以得到下一個元素的地址;
  3. &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;
}

更多視頻、文章、嵌入式學習資源,微信關注 【學益得智能硬件】

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章