c语言二维数组变成一维数组的通项公式,速求
对二维数组用两次循环,将其赋值到一维数组就够了。
举个例子,二维数组a[N][M],一维数组b[]
编写主函数部分:
int i,j,k=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
b[k++]=a[i][j];
扩展资料:
反之一维转二维
#include <stdio.h>
#include <stdlib.h>
#define ROW 3
#define COL 2
int main(int argc, char *argv[])
{
int arr1D[] = {1,2,3,4,5,6};
int arr2D[ROW][COL];
int i,j;
//一维维整型数组转换为二维整型数组
for(i=0;i<ROW;i++)
{
for(j=0;j<2;j++)
{
arr2D[i][j]=arr1D[i*COL+j];
}
}
//二维整型数组打印显示
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
printf("%d ", arr2D[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2018-03-02
二维数组就是一维数组 直接循环就行 例如 a[3][4] 可以直接用*p指向 然后 p++ 只要不超过3x4就行
#include <stdio.h>#define N 3
#define M 4
int main(){
int a[N][M]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},i,j,*p;
p=(int *)a;//将二维数组a变成一维数组p
for(i=0;i<N;i++){
for(j=0;j<M;printf("%3d",a[i][j++]));//用数组名a仍然按二维数组操作
printf("\n");
}
printf("\n");
for(j=M*N,i=0;i<j;printf("%3d",p[i++]));//用p则按一维数组操作
printf("\n");
return 0;
}本回答被网友采纳
第2个回答 2015-11-12
这个很简单,因为二维数组就是一位数组的指针顺序,比如c[3][4],他的第7个元素恰好就是按顺序排的一维数组的第七个,所以可以简单的用指针首地址加上N来表示第N个数字,这个N是可以超过4的,直接用。只要补超过3*4-1就行。本回答被网友采纳
第3个回答 2017-08-05