陣列
- 前言
- 一、一維陣列
- 1、一維陣列的創建
- 2、一維陣列的使用
- 2.1陣串列示法
- 2.2指標表示法
- 3、一維陣列在記憶體上的映射
- 二、多維陣列
- 1、多維陣列的創建
- 2、多維陣列的使用
- 2.1陣串列示法
- 2.2指標表示法
- 3、二維陣列在記憶體上的映射
- 三、陣列的實戰運用
- 1、用一維陣列存盤整數1到100并求和
- 2、圖形列印
前言
陣列(Array)是有序的元素序列,為了處理方便, 是把具有相同型別的若干元素按有序的形式組織起來的一種形式, 這些有序排列的同類資料元素的集合稱為陣列,
一、一維陣列
1、一維陣列的創建
1.1在堆疊區中創建
//方式一:顯式宣告法
int array[4]={1,2,3,4};//宣告并定義一個含有4個整型元素的整型陣列
//方式二:隱式宣告法
int array[]={1,2,3,4};//同上
1.2在堆區中創建
//在堆區開辟一個含有4個整型記憶體空間,并用一個整型指標指向該空間
int *array=(int *)malloc(sizeof(int)*4);
2、一維陣列的使用
2.1陣串列示法
2.1.1陣列元素的獲取
int array[4]={1,2,3,4};
//采用下標索引
printf("array[0]=%d\n",array[0]);
printf("array[1]=%d\n",array[1]);
printf("array[2]=%d\n",array[2]);
printf("array[3]=%d\n",array[3]);
//采用遍歷的方式
for(int i=0;i<4;i++)
{
printf("array[%d]=%d\n",i,array[i]);
}
2.1.2陣列的函式傳值
void print_array(int array[4])
{
for(int i=0;i<4;i++)
{
printf("array[%d]=%d\n",i,array[i]);
}
}
int main()
{
int array[4]={1,2,3,4};
print_array(array);
return 0;
}
2.2指標表示法
2.2.1陣列元素的獲取
int array[4]={1,2,3,4};
printf("a[0]=%d\n",*(array+0));//在編譯程序中*(array+0)將轉換成*(array+0*sizeof(int))
printf("a[0]=%d\n",*(array+1));//在編譯程序中*(array+0)將轉換成*(array+1*sizeof(int))
printf("a[0]=%d\n",*(array+2));//在編譯程序中*(array+0)將轉換成*(array+2*sizeof(int))
printf("a[0]=%d\n",*(array+3));//在編譯程序中*(array+0)將轉換成*(array+3*sizeof(int))
//遍歷
for(int i=0;i<4;i++)
{
printf("a[%d]=%d\n",i,*(array+i));
}
2.2.2陣列的函式傳值
void print_array(int *array)
{
for(int i=0;i<4;i++)
{
printf("a[%d]=%d\n",i,array[i]);
}
}
int main()
{
int array[4]={1,2,3,4};
print_array(array);
return 0;
}
3、一維陣列在記憶體上的映射

代碼驗證如下
int array[4]={1,2,3,4};
printf("array[0]的地址為:%p\n",&array[0]);
printf("array[1]的地址為:%p\n",&array[1]);
printf("array[2]的地址為:%p\n",&array[2]);
printf("array[3]的地址為:%p\n",&array[3]);
VC6.0運行結果如下

二、多維陣列
對于一維陣列,我們可以這樣理解,一個小號水果籃子里面放著n個水果,而多維
陣列,以二維陣列為例,可以理解為——n個小號水果籃子,每個水果籃子里面放著n
個水果,而以三維陣列為例,可以理解為——n個中號水果籃子,每個中號水果籃
子里面放著n個小號水果籃子,而每個小號水果籃子里面又放著n個水果...可以這么
說,n維陣列套n層娃(俄羅斯套娃哈哈哈)
1、多維陣列的創建
1.1在堆疊區中創建
int array[2][2]={{1,2},{3,4}};//創建一個二維陣列
int array[2][2][2]={{{1,2},{3,4}}, //創建一個三維陣列
{{5,6},{7,8}}
};
在堆區中創建
//以二維陣列為例
int **array=(int **)malloc(2*sizeof(int *));
for(int i=0;i<2;i++)
{
array[i]=(int *)malloc(2*sizeof(int));
}
2、多維陣列的使用
2.1陣串列示法
2.1.1陣列元素的獲取
//以二維陣列為例
//采用下標索引
int array[2][2]={{1,2},{3,4}};
printf("array[0][0]=%d\n",array[0][0]);
printf("array[0][1]=%d\n",array[0][1]);
printf("array[1][0]=%d\n",array[1][0]);
printf("array[1][1]=%d\n",array[1][1]);
//采用遍歷的方式
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
printf("array[%d][%d]=%d\n",i,j,array[i][j]);
}
}
2.1.2陣列的函式傳值
void print_array(int array[2][2])//也可以寫成int array[][2],但是不能寫成int array[2][]
{
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
printf("a[%d][%d]=%d\n",i,j,array[i][j]);
}
}
}
int main()
{
int array[2][2]={{1,2},{3,4}};
print_array(array);
return 0;
}
2.2指標表示法
2.1.1陣列元素的獲取
int **array=(int **)malloc(2*sizeof(int *));
for(int i=0;i<2;i++)
{
array[i]=(int *)malloc(2*sizeof(int));
}
int num=1
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
array[i][j]=num++;
}
}
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
printf("a[%d][%d]=%d\n",i,j,array[i][j]);
}
}
2.1.2陣列的函式傳值
void print_array(int (*array)[2])
{
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
printf("a[%d][%d]=%d\n",i,j,array[i][j]);
}
}
}
int main()
{
int array[2][2]={{1,2},{3,4}};
print_array(array);
return 0;
}
3、二維陣列在記憶體上的映射
首先我們先看看二維陣列的邏輯結構,如下

但是其實多維陣列在底層的記憶體存盤和一維陣列是一樣的

代碼驗證如下
int array[2][2]={{1,2},{3,4}};
printf("array[0][0]的地址:%p\n",&array[0][0]);
printf("array[0][1]的地址:%p\n",&array[0][1]);
printf("array[1][0]的地址:%p\n",&array[1][0]);
printf("array[1][1]的地址:%p\n",&array[1][1]);
VC6.0運行結果如下

三、陣列的實戰運用
編譯器——VC6.0
1、用一維陣列存盤整數1到100并求和
int a[100]={0};//初始化為0
int sum=0;
for(int i=0;i<100;i++)//賦值
{
a[i]=i+1;
}
for(i=0;i<100;i++) //求和
{
sum+=a[i];
}
printf("從1加到100的和為:%d\n",sum);
2、圖形列印
int a[4][1]={{1},{2},{3},{4}};
for(int i=0;i<4;i++)
{
for(int j=1;j<=a[i][0];j++)
{
printf("*");
}
printf("\n");
}
運行結果如下

int a[4][1]={{1},{2},{3},{4}};
for(int i=0;i<4;i++)
{
for(int k=5;k>a[i][0];k--)
{
printf("*");
}
printf("\n");
}
運行結果如下

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/221078.html
標籤:其他
上一篇:小白的學習路程
