结构化C误解

时间:2013-11-21 15:37:52

标签: c struct

我试图在C中理解struct和typedef的概念。所以我创建了这个简单的程序,但由于某种原因它无法正常工作。

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

typedef struct testT{

    int number;

} testT;

int main()
{
    testT.number=10;

    printf("%d", testT->number);
}

然而,它正在给我 错误:预期标识符或'(''''''令牌之前 为什么会出现这种情况?

由于

6 个答案:

答案 0 :(得分:5)

testT是一种类型,就像int一样,您需要使用变量:

testT t;
t.number=10;
printf("%d", t.number);

另请注意,您应使用点运算符.,因为箭头运算符->用于指向struct的指针。

答案 1 :(得分:1)

您需要创建结构的实例。你已经定义了它,但你需要实例化它。

testT mytestT;
mytestT.number=10;
...

答案 2 :(得分:1)

struct <name>typedef <type> <name>都只定义类型。您必须实际分配内存来保存该类型的实例:

int main()
{
  struct testT a;
  a.number=10;

  printf("%d", a.number);
}

此外,您滥用->运算符。这仅适用于指向结构的指针。

int main()
{
  struct testT a;
  struct testT *b = &a;
  a.number=10;

  printf("%d", b->number);
}

b->number相当于(*b).number;

答案 3 :(得分:1)

不,typedef struct xxx { ... } yyy;不是'C ++语法',它是一种正确的C语法。

您在此处所做的是定义名为testT的类型,该类型表示struct testT是一个包含名为int的{​​{1}}类型字段的结构。

使用此类型需要做的是声明该类型的变量:

number

int main(void) { testT variable; variable.number = 10; printf("%d\n", variable.number); } 表示法用于替换->。例如:

(*).

答案 4 :(得分:0)

testT是一种类型。首先声明一个testT

类型的变量
testT t;

不要忘记改变

printf("%d", testT->number);  

printf("%d", t.number);

答案 5 :(得分:0)

typedef struct testT {
    int number;
} testT;

定义一个名为testT的类型,使用时如下:

testT aTestStruct;

在功能上等同于(匿名结构类型):

struct { int number } aTestStruct;

typdef 只允许我们保存自己,不必每次都重复struct { ... }的匿名结构声明语法。