1. 首页 > 科技

C语言一个二维数组如何转换成一个新的一维数组? c语言九九乘法表

C语言一个二维数组如何转换成一个新的一维数组?c语言九九乘法表

C语言设计程序二维数组变一维怎么变

提供一个最简单的办法:设原二维数组是int a[N][M];,再声明一个与a的元素类型兼容的指针,如int *p;,然后将a强制为(int *)型赋给p,即p=(int *)a;。这样操作后,用a仍然对原数组能进行二维数组操作,而用p就可按一维数组对原数组进行操作了(相当于将二维数组变成了一维数组p)。验证代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include "stdio.h"

#define N 3

#define M 4

intmain(intargc,char*argv[]){

    inta[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");

    return0;

}

运行结果如下图:

如何将一个二维数组转化为一维数组元素呢

假设你一维数组的大小为100

你需要把它拆分为20*5的一个二维矩阵。

不妨这样去实现:

假设一维数组的下标为X,可以把它在逻辑上转换为二维数组的下标:

m = X / 5

n = X % 5

比如你要找第一行第二列的元素,那在一维数组中就是a[1]

转化为二维坐标就是b[0][1]。

其实多维数组和一维数组一样,在计算机中都是用的一段连续的内存。只是他们的表现形式不一样。

另外,C里边没有动态的二维数组,第二维的大小必须指定的。

问题补充:转换成二维数组以后怎么才能用更简单的方式a[m][n]去表达呢?如果用那个表达式的话就太麻烦了,我要进行大量的操作,容易出问题。

打不出来中文直接打英文也行,我能看懂的,呵呵,谢谢啦

答:这个可以用宏来实现。举个例子说,比如你定义一个大小为100的一维数组A,然后你需要别人输入m=8,n=9(很多情况别人不可能按照你的意图来刚好用m和n整除一维数组的下表最大值,也就是说那个一维数组只需要保证足够大就可以了),然后你希望得到一个8*9的二维矩阵B[8][9]。

引用这个二维矩阵的时候,直接使用B[3][4]来引用第三行第四列的元素?

用宏定义(以下宏定义并没有上机调试,只是提供思路)

#define B[(x)][(y)] A[((x*m)+(y%n)]

解释一下:x*m,加入你需要B[3][4],那么就是对应一维数组第3*8+4%9=28个元素。

怎样把二维数组转化成一维数组

c#的代码

static void Main(string[] args)

{

string[,] str2s = new string[,] { { "a", "b", "c" }, { "d", "e", "f" } };

int iw = str2s.GetLength(0);//第一维度长度

int jw = str2s.GetLength(1);//第二维度长度

int _count=0;

string[] arrs = new string[iw * jw];//声明一个一维数组,并根据二维数组设置长度

for (int i = 0; i < iw; i++)

{

for (int j = 0; j < jw; j++)

{

arrs[_count++] = str2s[i, j];

}

}

for (int i = 0; i < arrs.Length; i++)

{

Console.Write(arrs[i]);//结果输出为 abcdef

}

}

怎么把一个二维数组转化成一维数组

无非就是将第二行接到第一行后面,将第三行再接到第二行后面,如此类推即可将一个二维数组转换成一维数组