如何将一维数组分配给二维数组?

时间:2019-02-11 05:26:53

标签: c arrays

我有一个1D数组A[3]和一个2D数组B[4][3]。我想将数组A[3]分配给数组B[4][3]的行之一。如何正确做?

#include<stdio.h>

void main()
{
   int A[3]={1,2,3};
   int B[4][3]={0};
   int row_select=2;

   B[row_select][] = A;
}   

但是此分配无效。我不想使用for循环按元素分配元素。我想在一个声明中做到这一点。

2 个答案:

答案 0 :(得分:3)

memcpy是一个不错的选择,尽管很有可能在内部使用了循环。

memcpy(B[row_select], A, sizeof(A));

答案 1 :(得分:1)

不要这样做:使用memcpy

只要您愿意进行一些初步的设置以使您的代码难以辨认,就可以用一条语句来完成赋值。您可以利用以下事实:可以将结构(1)一步分配给彼此,并且(2)包含固定大小的数组。无论如何,编译器都可能在幕后运行memcpy,但这是一个有趣的荒谬练习:

#include<stdio.h>

#define SZ 3 // this is just for convenience

// a pointer to an anonymous structure containing our array
typedef struct {
    int x[SZ];
} *pthrowaway;

int main(void)
{
    int A[SZ]={1,2,3};
    int B[4][SZ]={0};
    int row_select=2;

    pthrowaway a = (pthrowaway)&A;
    pthrowaway b = (pthrowaway)&B[row_select];

    *b = *a; // magic

    return 0;
}

变量ab是不必要的。您实际上可以在单个语句中分配数组:

*(pthrowaway)&B[row_select] = *(pthrowaway)&A;

这是一个显示C99版本的IDEOne链接:https://ideone.com/IQ6ttg 这是一个常规的C语言:https://ideone.com/pH1hS2