所以,我在其他结构中有一个结构..我想知道我怎么可以malloc那个结构...
#include <stdio.h>
#include <string.h>
struct
{
int n, o, p;
struct
{
int a, b, c;
}Str2;
}Str1;
main()
{
struct Str1.Str2 *x (Str1.Str2*)malloc(sizeof(struct Str1.Str2*));
x->a = 10;
}
所以,我尝试了,但是,不工作.. 我怎么能做到这一点,或者更好地分配所有结构?
答案 0 :(得分:3)
您只需要分配Str1,并自动分配Str2。在我的系统上,Str1的sizeof是24,等于6 int的大小。试试这个:
typedef struct {
int n;
int o;
int p;
struct {
int a;
int b;
int c;
}Str2;
}Str1;
main()
{
Str1 *x = (Str1 *)malloc(sizeof(Str1));
x->Str2.a = 10;
printf("sizeof(Str1) %d\n", (int)sizeof(Str1));
printf("value of a: %d\n", x->Str2.a);
}
答案 1 :(得分:1)
为什么不宣布以下内容:
typedef struct
{
int a, b, c;
}Str2;
typedef struct
{
int n, o, p;
Str2 s2;
}Str1;
然后您可以根据需要单独分配它们。例如:
Str2 *str2 = (Str2*)malloc(sizeof(Str2));
Str1 *str1 = (Str1*)malloc(sizeof(Str1));
s1->s2.a = 0; // assign 0 to the a member of the inner Str2 of str1.
答案 2 :(得分:1)
Str1
和Str2
是您声明的匿名struct
的对象,因此语法很接近。你忘记了一些typedef吗?
//declares a single object Str1 of an anonymous struct
struct
{
}Str1;
//defines a new type - struct Str1Type
typedef struct
{
}Str1Type;
答案 3 :(得分:1)
要命名struct
,请使用
struct Str1
{
...
};
如果您想引用此特定struct Str1
,现在可以使用struct
。
如果您只想将其用作Str1
,则需要使用typedef
,例如
typedef struct tagStr1
{
...
} Str1;
或typedef struct Str1 Str1;
如果我们有第一种类型的struct Str1
声明。
创建一个没有名称的struct
实例(实例意味着&#34;该类型的变量&#34;):
struct
{
...
} Instance;
由于此struct
没有名称,因此无法在其他任何地方使用,这通常不是您想要的。
在C(而不是C ++)中,你不能在另一个结构的类型定义中定义一个新的类型结构,所以
typedef struct tagStr1
{
int a, b, c;
typedef struct tagStr2
{
int x, y, z;
} Str2;
} Str1;
不会编译。
如果我们将代码更改为:
typedef struct tagStr1
{
int a, b, c;
struct tagStr2
{
int x, y, z;
};
} Str1;
typedef struct tagStr2 Str2;
将编译 - 但至少gcc会发出警告&#34; struct tagStr2不会声明任何&#34; (因为它希望你想在struct tagStr2
里面实际拥有Str1
类型的成员。