Array
Preface
Array (the Array) is an ordered sequence of elements, in order to facilitate processing, to form a plurality of elements with the same kind of the form of organized ordered. These ordered collections of similar data elements are called arrays .
One, one-dimensional array
1. The creation of a one-dimensional array
1.1 Created in the stack area
//方式一:显式声明法
int array[4]={
1,2,3,4};//声明并定义一个含有4个整型元素的整型数组
//方式二:隐式声明法
int array[]={
1,2,3,4};//同上
1.2 Created in the heap area
//在堆区开辟一个含有4个整型内存空间,并用一个整型指针指向该空间
int *array=(int *)malloc(sizeof(int)*4);
2. The use of one-dimensional arrays
2.1 Array notation
2.1.1 Obtaining array elements
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 Array function pass value
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 Pointer notation
2.2.1 Obtaining array elements
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 Array function pass value
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. The mapping of one-dimensional arrays on memory
Code verification is as follows
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 running results are as follows
Two, multidimensional array
对于一维数组,我们可以这样理解,一个小号水果篮子里面放着n个水果,而多维
数组,以二维数组为例,可以理解为——n个小号水果篮子,每个水果篮子里面放着n
个水果,而以三维数组为例,可以理解为——n个中号水果篮子,每个中号水果篮
子里面放着n个小号水果篮子,而每个小号水果篮子里面又放着n个水果...可以这么
说,n维数组套n层娃(俄罗斯套娃哈哈哈)
1. Creation of multidimensional array
1.1 Created in the stack area
int array[2][2]={
{
1,2},{
3,4}};//创建一个二维数组
int array[2][2][2]={
{
{
1,2},{
3,4}}, //创建一个三维数组
{
{
5,6},{
7,8}}
};
Created in the heap area
//以二维数组为例
int **array=(int **)malloc(2*sizeof(int *));
for(int i=0;i<2;i++)
{
array[i]=(int *)malloc(2*sizeof(int));
}
2. The use of multidimensional arrays
2.1 Array notation
2.1.1 Obtaining array elements
//以二维数组为例
//采用下标索引
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 Array function pass value
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 Pointer notation
2.1.1 Obtaining array elements
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 Array function pass value
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. The mapping of two-dimensional arrays on memory
First, let’s take a look at the logical structure of a two-dimensional array, as
But in fact, the memory storage of a multi-dimensional array at the bottom is the same as that of a one-dimensional array.
Code verification is as follows
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 running results are as follows
Three, the actual use of arrays
Compiler-VC6.0
1. Use a one-dimensional array to store integers 1 to 100 and sum them
int a[100]={
0};//初始化为0
int sum=0;
for(int i=0;i<100;i++)//赋值
{
a[i]=i;
}
for(i=0;i<100;i++) //求和
{
sum+=a[i];
}
printf("从1加到100的和为:%d\n",sum);
2. Graphic printing
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");
}
The results are as follows
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");
}
The results are as follows