将2D数组行传递到1D数组

时间:2019-12-08 11:35:58

标签: c arrays

如何将2D数组中的行传递(提取)到1D数组。到目前为止,我只能将2D数组中的列传递给1D数组。

int funcA(int a[], int size)
{
    //do something
    return x;
}
int funcB(int a[MAX][MAX], int m, int n)
{
    int x= funcA(a[0], m);
}

例如:
1 2 3 4
5 6 7 8
9 5 3 2
我想通过(1、2、3、4)或(9、5、3、2),而不是(1、5、9)

1 个答案:

答案 0 :(得分:0)

使用[ROW][COL],显示一行很简单。只需要显示的行和列数即可。
专栏涉及更多。需要以行和列为单位的数组大小,并显示列。
array[row]是指向每一行的便捷指针。
对于列,可以将数组强制转换为单个指针,并通过乘法和加法将每个索引获取到列。
可以创建另一个数组,并使用循环将列值复制到新数组中。

#include <stdio.h>
#include <stdlib.h>

#define ROW 4
#define COL 3

int showrow ( int *ptr, int col) {
    for ( int i = 0; i < col; ++ i) {
        printf ( "%3d", ptr[i]);
    }
    printf ( "\n");
    return 0;
}

int showcol ( int *ptr, int row, int col, int show) {
    for ( int i = 0; i < row; ++ i) {
        printf ( "%*d\n",( show + 1) * 3, ptr[i * col + show]);
    }
    return 0;
}

int main ( void) {
    int array[ROW][COL];
    int value = 0;
    for ( int row = 0; row < ROW; ++row) {
        for ( int col = 0; col < COL; ++col) {
            array[row][col] = value;
            printf ( "%3d", array[row][col]);
            ++value;
        }
        printf ( "\n");
    }
    printf ( "\n");
    showcol ( (int *)array, ROW, COL, 1);//show col 1
    printf ( "\n");
    showrow ( array[1], COL);//show row 1

    return 0;
}
相关问题