C语言入门——《一维到多维数组》

   日期:2020-11-16     浏览:155    评论:0    
核心提示:数组前言一、一维数组1、一维数组的创建2、一维数组的使用2.1数组表示法2.2指针表示法3、一维数组在内存上的映射二、多维数组1、多维数组的创建2、多维数组的使用2.1数组表示法2.2指针表示法3、二维数组在内存上的映射三、数组的实战运用1、用一维数组存储整数1到100并求和2、图形打印前言数组(Array)是有序的元素序列,为了处理方便, 是把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。一、一维数组1、一维数组的创建1.1在栈区中创建//方

数组

  • 前言
  • 一、一维数组
    • 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");

}

运行结果如下

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服