C語言中一維數組基本概念和初始化
一、基本概念
數組:一組有序且類型相同數據的集合
數組元素:構成數組的每個數據
數組下標:數組中每個數組元素的位置的索引或指示,下標從0開始
數組的維數:數組元素下標的個數,根據數組的維數可以分爲一維、二維、三維和多維數組
二、分類
按存儲內容分爲:
數值數組:用來存儲數值的
字符數組:用來存儲字符'a'
指針數組:用來存儲指針(地址)的
結構數組:用來存放一個結構類型的數據
一維數組:只用一個下標的數組
一般形式:類型符 數組名 [ 常量表達式 ],如 int a[5],表示定義了一個整型數組,數組名爲a,此數組有5個整型元素,5也稱作是數組的長度
一維數組初始化:給各個數組元素賦值
初始化方式:
三、一位數組的初始化
1、定義的同時全部初始化
int a[5] = {0,1,2,3,4};
2、定義的同時部分初始化
int a[5] = {0,1,2};
a數組中有5個元素,只給前3個元素初始化了值,系統會自動給後面2個元素賦值爲0
int a[5] = { [3] = 1,[4] = 2 };
a數組中有5個元素,只給下標爲3的元素 a[3] 賦值爲1,下標爲4的元素
a[4] 賦值爲2,系統會自動給其他元素賦值爲0
3、定義的同時使數組全部賦值爲0
int a[5] = {0};
a數組中有5個元素,只給第一個元素賦值爲0,系統會自動給其他元素賦值爲0
int a[5] = {0,0,0,0,0};
a數組中有5個元素,給數組所有元素賦值爲0
4、當對於數據的個數已經確定是,可以不指定數組長度
int a[ ] = { 0,1,2,3,4 }
5、先定義然後初始化
int a[5];
a[0] = 0;
a[1] = 1;
a[2]
= 2;
a[3]
= 3;
a[4]
= 4;
代碼如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("一維數組初始化方式:\n");
//1、定義同時初始化
int a[5] = {0,1,2,3,4};
int i;
//遍歷數組中的每個元素
printf(" 1、定義同時初始化\n");
for(i = 0; i < 5; i++)
{
//打印數組元素的每個值
printf(" 數組元素的值爲:%d\n",i,a[i]);
}
//2、定義同時部分初始化
int a1[5] = {0,1,2};
int j;
//遍歷數組中的每個元素
printf(" 2、定義同時部分初始化\n");
for(j = 0; j < 5; j++)
{
//打印數組元素的每個值
printf(" 數組元素的值爲:%d\n",a1[j]);
}
//2、定義同時部分初始化
int a2[5] = {[3] = 1,[4] = 2};
int k;
//遍歷數組中的每個元素
printf(" 2、定義同時部分初始化\n");
for(k = 0; k < 5; k++)
{
//打印數組元素的每個值
printf(" 數組元素的值爲:%d\n",a2[k]);
}
//3、定義同時全部初始化爲0
int a3[5] = {0};
int m;
//遍歷數組中的每個元素
printf(" 3、定義同時全部分初始化爲0\n");
for(m = 0; m < 5; m++)
{
//打印數組元素的每個值
printf(" 數組元素的值爲:%d\n",a3[m]);
}
//3、定義同時全部初始化爲0
int a4[5] = {0,0,0,0,0};
int n;
//遍歷數組中的每個元素
printf(" 3、定義同時全部分初始化爲0\n");
for(n = 0; n < 5; n++)
{
//打印數組元素的每個值
printf(" 數組元素的值爲:%d\n",a4[n]);
}
//4、不指定數組的長度
int b[] = {0,1,2,3,4};
int t;
//遍歷數組中的每個元素
printf(" 4、不指定數組的長度\n");
for(t = 0; t < 5; t++)
{
//打印數組元素的每個值
printf(" 數組元素的值爲:%d\n",b[t]);
}
//5、先定義後初始化
int a5[5];
int r;
a5[0] = 0;
a5[1] = 1;
a5[2] = 2;
a5[3] = 3;
a5[4] = 4;
//遍歷數組中的每個元素
printf(" 5、先定義後初始化\n");
for(r = 0; r < 5; r++)
{
//打印數組元素的每個值
printf(" 數組元素的值爲:%d\n",a5[r]);
}
system("pause");
return 0;
}
測試結果爲:
注意:如果一個數組不初始化,裏面的值會是垃圾值,因此數組使用之前一定要初始化,建議定義的時候就初始化
測試代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定義一個數組但不初始化
int a[5];
int n;
//遍歷數組中的每個元素
for(n = 0; n < 5; n++)
{
//打印數組元素的每個值
<span style="white-space:pre"> </span>printf("\n");
printf(" 數組元素的值爲:%d\n",a[n]);
}
system("pause");
return 0;
}
測試結果:
四、一位數組的存儲方式
計算機給數組分配一塊連續的存儲空間
測試代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int j;
//定義一個整型數組並初始化
int a[5] = {0,1,2,3,4};
//定義一個字符數組並初始化
char ch[3] = {'a','b','c'};
//打印整型數組a[5]的元素地址
printf("數組a[5]每個元素的地址爲\n");
//用for循環取數組元素的地址
for(i = 0; i < 5; i++)
{
//打印出數組每個元素的地址
printf(" %p\n",&a[i]);
}
//打印字符數組的元素地址
printf("數組ch[3]每個元素的地址爲\n");
//用for循環取數組元素的地址
for(j = 0; j < 3; j++)
{
//打印出數組每個元素的地址
printf(" %p\n",&ch[j]);
}
system("pause");
return 0;
}
測試結果:
數組名代表數組的首地址,從首地址的位置一次存入數的每一個元素
每個元素佔用相同的字節數,所佔字節數取決於數組的類型
每個數組元素之間的地址是連續的
測試代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int j;
//定義一個整型數組並初始化
int a[5] = {0,1,2,3,4};
//定義一個字符數組並初始化
char ch[3] = {'a','b','c'};
//打印整型數組a[5]的首地址
printf("數組a[5]的首地址爲:%p\n",&a);
//打印整型數組a[5]的元素地址
printf("數組a[5]每個元素的地址爲\n");
//用for循環取數組元素的地址
for(i = 0; i < 5; i++)
{
//打印出數組每個元素的地址
printf(" %p\n",&a[i]);
}
//打印字符數組的首地址
printf("數組ch[3]的首地址爲:%p\n",&ch);
//打印字符數組的元素地址
printf("數組ch[3]每個元素的地址爲\n");
//用for循環取數組元素的地址
for(j = 0; j < 3; j++)
{
//打印出數組每個元素的地址
printf(" %p\n",&ch[j]);
}
system("pause");
return 0;
}
測試結果:
結論:
數組名是一個常量,存儲的是數組的首地址,數組名的地址和數組元素的第一個元素地址相同!