如何分配具有类似结构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)
您无法在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节(数组和指针).