我试图在C中理解struct和typedef的概念。所以我创建了这个简单的程序,但由于某种原因它无法正常工作。
#include <stdio.h>
#include <stdlib.h>
typedef struct testT{
int number;
} testT;
int main()
{
testT.number=10;
printf("%d", testT->number);
}
然而,它正在给我 错误:预期标识符或'(''''''令牌之前 为什么会出现这种情况?
由于
答案 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 { ... }
的匿名结构声明语法。