据我所知,分配数组是一个内存复制操作,这会起作用吗?
struct x{
int i;
int j;
} A[5];
struct y{
int i;
int j;
struct y * next;
} B[5];
然后我可以这样做:
B[0] = A[0];
并期望i和j复制为index [0]?
编辑:我真正想知道的是如何在C中完成这项工作。
答案 0 :(得分:3)
我的建议是将struct x
嵌入struct y
,如下:
struct x{
int i;
int j;
} A[5];
struct y{
struct x x;
struct y * next;
} B[5];
这样,它很容易分配,并且两个结构的第一个sizeof(struct x)
字节的内存布局保证相同,即使在C89中也是如此。
您现在可以
B[0].x = A[0];
由于保证struct x
出现在内存中struct y
的第一个字节,您仍然可以
memcpy(&B[0], &A[0], sizeof A[0]);
播放此布局
答案 1 :(得分:2)
不,那行代码不会编译。
请参阅http://codepad.org/6g3c9Ctz
您可以使用memcpy
使其正常工作。见http://codepad.org/1I9Z3npC
#include <string.h>
#include <stdio.h>
struct x{
int i;
int j;
} A[5];
struct y{
int i;
int j;
struct y * next;
} B[5];
int main() {
A[0].i = 5;
A[0].j = 7;
memcpy(&B[0], &A[0], sizeof A[0]);
printf("%d %d\n", B[0].i, B[0].j);
return 0;
}
答案 2 :(得分:0)
不,你不能,因为struct x和struct y不是兼容的类型。
答案 3 :(得分:-1)
你可以使用演员:
(struct x)(B[0]) = A[0];