C语言 如何将1D数组分配给2D数组?

xggvc2p6  于 2023-06-05  发布在  其他
关注(0)|答案(2)|浏览(156)

我有一个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循环逐个元素赋值。我想用一句话来表达。

dgtucam1

dgtucam11#

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

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

yfwxisqw2#

不要这样做:使用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;

下面是一个IDEOne链接,显示了C99版本:https://ideone.com/IQ6ttg下面是一个普通的C:https://ideone.com/pH1hS2

相关问题