优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++|二维数组转一维数组及二维数组用数组指针输出

nanyue 2024-10-19 06:55:52 技术文章 6 ℃

二维数组及多维数组本质上还是线性的数据存储结构,因为内存在本质上就只是线性结构,二维数组转一维数组时,只需要考虑两者的下标对应关系就可以了。

数组名会被编译器处理为指针常量,二维数组可以理解为数组的数组,但却无法用一个二级指针来引用它,因为二级指针无法包含行、列的维度信息,变通的方法就是用一个数组指针来指向它。

以下内容实现的细节见下面的实例:

#include <iostream>
using namespace std;
void main()
{
	int i,j,k;
	const int row=4;
	const int col=5;
	const int rc=20;
	int a[row][col],b[rc];
	for(i=0;i<row;++i)			// 二维数组赋值
		for(j=0;j<col;++j)
			a[i][j]=(i+1)*10+(j+1);
	for(i=0;i<row;++i)			// 二维数组输出
	{
		for(j=0;j<col;++j)
			cout<<a[i][j]<<" ";
		if(j%col==0)
			cout<<endl;
	}
	for(i=0;i<row;++i)		// 用二维数组给一维数组赋值
		for(j=0;j<col;++j)
		{
			k=i*col+j;		// 注意一维数组与二维数组下标的关系
			b[k]=a[i][j];
		}
	for(k=0;k<rc;++k)		// 一维数组输出
	{
		cout<<b[k]<<" ";
		if((k+1)%col==0)
			cout<<endl;
	}
	int(*pa)[col];
	pa=a;		//a已退化为指针常量
	//int **pa;
	//pa=a;//cannot convert from 'int [4][5]' to 'int ** '
	for(i=0;i<row;++i)			// 二维数组用数组指针输出
	{
		for(j=0;j<col;++j)
			cout<<*(*(pa+i)+j)<<" ";
		if(j%col==0)
			cout<<endl;
	}
 system("pause");
}
/*
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
*/

-End-

最近发表
标签列表