将结构数组分配给typedef结构

Ano*_*ous 1 c

如何分配具有类似结构typedef struct的另一个数组struct.

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int age;
    int height;
} Person[3];

struct internalStruct {
    int age;
    int height;
};

int main(void) {

    //Possible
    Person bob = {{7,5},{4,2},{4,3}};

    //Is it possible to assign array to struct?
    struct internalStruct intr[3] = {{4,32},{2,4},{2,4}};
    Person job = intr; // Does not work :(. 
    printf("%d", jon[0].height);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 5

您无法在C中分配数组.您可以在声明数组时初始化数组,但数组表达式不能出现在赋值运算符的左侧.

如果要将数组对象的值复制到另一个数组对象中,可以使用显式循环来分配每个元素(假设元素类型是可分配的),或者您可以使用memcpy().(注意,调用memcpy()需要指定要复制的字节数; sizeof用于此.)

你的typedef Person:

typedef struct {
    int age;
    int height;
} Person[3];
Run Code Online (Sandbox Code Playgroud)

是不明智的.甲Person对象(变量)是不是一个人; 这是一组3人(人?).

我的建议:删除typedef并使用struct标签(就像你已经做的那样struct internalStruct)并且不要尝试为数组类型创建一个特殊名称:

struct Person {
    int age;
    int height;
};
Run Code Online (Sandbox Code Playgroud)

...

struct Person bob[] = {{7,5},{4,2},{4,3}};
Run Code Online (Sandbox Code Playgroud)

(这仍然令人困惑,因为bob有三个人.)

而且struct Person(正如我在这里定义的那样)并且struct internalStruct是两种不同的类型.如果您尝试在这两种类型之间进行分配,则可能表示代码中存在设计缺陷; 您分配给彼此的对象应该是相同的类型.

推荐阅读:comp.lang.c FAQ,特别是第6节(数组和指针).