我有一个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循环按元素分配元素。我想在一个声明中做到这一点。
答案 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;
}
变量a
和b
是不必要的。您实际上可以在单个语句中分配数组:
*(pthrowaway)&B[row_select] = *(pthrowaway)&A;
这是一个显示C99版本的IDEOne链接:https://ideone.com/IQ6ttg 这是一个常规的C语言:https://ideone.com/pH1hS2