为C中的结构类型分配内存

时间:2015-09-18 06:18:55

标签: c struct push typedef pop

我在我的程序中遇到了一个问题,我在这个问题中定义了一个结构类型但不是一个结构变量。

typedef struct 
{     
    int a;     
    int b;   
    int c;
    Token d;
} Foo;

然后我想在.c文件中使用这个结构foo,该文件将中缀作为后缀

#include "header"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>

int infix2postfix(char *infix, Arr arr) 
{
    struct Foo foo;
    char szToken[MAX_TOKEN];
    Stack stack = newStack();
    infix = getToken(infix, szToken, MAX_TOKEN); //provides next token to be scanned by function.

    ... //push pop using switch case didn't post code for simplicity.
    case...
    push(stack, *foo.a);

     ...
    case...
    pop(stack);

    ...

    goOut(arr, *foo.d); //goOut(function that populates and "arr" Array from printing.

}

所以当我在这里编译时,我得到了

error: storage size of ‘foo’ isn’t known struct Foo foo;

我已尝试struct Foo *foo = malloc(sizeof foo);分配内存,但它弄乱了我的push(stack, *foo.a);goOut(arr, *foo.d);如何解决这个问题?我是否必须首先在infix2postfix函数中分配内存然后声明一个结构变量?

2 个答案:

答案 0 :(得分:1)

你已经将Foo定义为typedef结构,所以你不再使用struct Foo来声明foo,只需使用 Foo foo;声明不是struct Foo foo;

答案 1 :(得分:1)

您定义了一种类型Foo,它是无标记的struct类型。您可以使用与struct Foo { int anonymous; char name[MAX_NAME]; };类型完全无关的单独Foo。 (这对人类来说会非常混乱,但编译器没有问题。)

在你的函数中,你应该写:

int infix2postfix(char *infix, Arr arr) 
{
    Foo foo;