C语言 如何分配结构的结构



所以,我在另一个结构体中有一个结构......我想知道我如何才能使该结构变得糟糕......

#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;
}

所以,我尝试了,但是,不起作用。我怎么能做到这一点,还是更好地分配所有结构?

你只需要分配 Str1,Str2 就会被自动分配。在我的系统上,Str1 的大小是 24,等于 6 个整数的大小。试试这个:

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) %dn", (int)sizeof(Str1));
     printf("value of a: %dn", x->Str2.a);
}

Str1Str2是你声明的匿名struct的对象,所以语法是错误的。你忘了一些类型定义吗?

//declares a single object Str1 of an anonymous struct
struct 
{
}Str1;
//defines a new type - struct Str1Type
typedef struct
{
}Str1Type;

要命名一个struct,您可以使用

 struct Str1
 {
    ... 
 };

现在,当您要引用此特定struct时,可以使用struct Str1

如果只想将其用作Str1,则需要使用 typedef ,例如

typedef struct tagStr1
{
  ...
} Str1;

或者typedef struct Str1 Str1;如果我们有第一种类型的struct Str1声明。

要创建没有名称的struct实例(实例表示"该类型的变量"):

 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 给出了"struct tagStr2 不声明任何内容"的警告(因为它希望您希望在 Str1 中实际拥有一个 struct tagStr2 类型的成员。

为什么不声明以下内容:

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.

相关内容

  • 没有找到相关文章

最新更新