【发布时间】:2011-12-14 12:39:16
【问题描述】:
我在分配数组时遇到问题:
int a[];
int b[] = {1,2,3};
&a = &b;
我知道我可以使用指针,但我想尝试这样......
【问题讨论】:
标签: c
我在分配数组时遇到问题:
int a[];
int b[] = {1,2,3};
&a = &b;
我知道我可以使用指针,但我想尝试这样......
【问题讨论】:
标签: c
您不能在 C 中分配数组。您可以使用在 <string.h> 中声明的 memcpy() 函数复制它们:
int a[3];
int b[] = {1,2,3};
memcpy(&a, &b, sizeof a);
【讨论】:
&array 是经过深思熟虑的选择 - 当复制单个对象(此处为单个数组)时,我认为应该首选 memcpy(&dest, &src, sizeof src) 形式(或使用 sizeof dest - 它们应该是相同的)。这是为了保持一致性 - 如果 a 和 b 的类型是非数组类型,则相同的 memcpy() 行将起作用。你可能不同意,但希望你能看到选择背后肯定有“判断”。
sizeof a是数组的大小。
&a 是一个指向数组的指针,正如你自己所说的。
a pointer to a pointer to an array,你回复了it is。不过谢谢你的澄清,我现在明白了。
正如您所发现的那样,这种方式行不通。您不能在 C 中分配数组。
然而,结构是可分配的。所以你可以这样做:
typedef struct
{
int x[3];
} T;
T a;
T b = { { 1, 2, 3 } };
a = b;
【讨论】:
T a;,而不是T a[];。