【问题标题】:Why can't I assign arrays as &a = &b?为什么我不能将数组分配为 &a = &b?
【发布时间】:2011-12-14 12:39:16
【问题描述】:

我在分配数组时遇到问题:

int a[];
int b[] = {1,2,3};
&a = &b;

我知道我可以使用指针,但我想尝试这样......

【问题讨论】:

    标签: c


    【解决方案1】:

    您不能在 C 中分配数组。您可以使用在 <string.h> 中声明的 memcpy() 函数复制它们:

    int a[3];
    int b[] = {1,2,3};
    
    memcpy(&a, &b, sizeof a);
    

    【讨论】:

    • @Jonathan Leffler:&array 是经过深思熟虑的选择 - 当复制单个对象(此处为单个数组)时,我认为应该首选 memcpy(&dest, &src, sizeof src) 形式(或使用 sizeof dest - 它们应该是相同的)。这是为了保持一致性 - 如果 ab 的类型是非数组类型,则相同的 memcpy() 行将起作用。你可能不同意,但希望你能看到选择背后肯定有“判断”。
    • @weberc2:是的,sizeof a是数组的大小。
    • 为什么需要一个指向指针的指针?有一个指向数组的指针还不够吗?
    • @weberc2:该答案中没有指向指针的指针。 &a 一个指向数组的指针,正如你自己所说的。
    • @caf 我想你误解了我,我说a pointer to a pointer to an array,你回复了it is。不过谢谢你的澄清,我现在明白了。
    【解决方案2】:

    正如您所发现的那样,这种方式行不通。您不能在 C 中分配数组。

    然而,结构是可分配的。所以你可以这样做:

    typedef struct
    {
        int x[3];
    } T;
    
    T a;
    T b = { { 1, 2, 3 } };
    
    a = b;
    

    【讨论】:

    • 谢谢这是直截了当的,是否有任何功能可以完成这项工作,所以我不必重写很多代码。
    • 好的,我试过这个:´T a[]; T b[] = { { 1, 2, 3 } }; a = b;' ,它仍然无法正常工作。输出:“表达式没有左值”。
    • @Starfighter911:那不是我写的代码!只是T a;,而不是T a[];
    猜你喜欢
    • 2010-11-24
    • 2022-07-23
    • 2011-05-30
    • 2014-03-29
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2011-08-10
    相关资源
    最近更新 更多