typedef 定义问题
typedef struct Stack{
int a ;
int b ;
};
//第二种形式
typedef struct
{
int a ;
int b ;
}Stack;
请问这个结构体的名字 定义在struct后面和整个结构体后面都可以吗? typedefstruct Stack 别名
typedefstruct {} 别名
本帖最后由 jackz007 于 2022-7-23 21:21 编辑
两种都是错的。
typedef struct STACK {
int a ;
int b ;
} Stack ;
这样定义,才可以这样定义结构体:
Stack x , * p ; typedef定义别名
typedef struct Stack
{
int a ;
int b ;
}a; // struct Stack 别名 a
//第二种形式
typedef struct
{
int a ;
int b ;
} b; // {}本身没名称 别名 b 这两者是不同的
第一个形式你要声明一个结构变量的话就必须这样写
struct Stack a;
第一个形式你要声明一个结构变量的话就只需要这样写
Stack a;
而且第一个形式在我的编译器上还报了Warning
我想是因为typedef的格式是:
typedef 类型 新名字
而第一种形式少了新名字,所以报了Warning,把typedef删了就不会报Warning了 如果你是 c 的话 ,建议使用这样的写法:typedef struct STACK{
int a, b;
} Stack;
十分方便,不影响使用,并且可以直接把整个结构体当作一个类型
后面的声明都很方便
Stack stack, sk;
Stack stacks;
如果用 c++ 就直接写:struct Stack{
int a, b;
}; // 注意有分号
用 c 的话就建议用 typedef 本帖最后由 桃花飞舞 于 2022-7-27 01:44 编辑
爱莫能助呀,typedef和struct结构体重命名的我也搞不清,不过你的代码中没有新的类型名typedef struct Stack
{
int a ;
int b ;
};
//第二种形式
typedef struct
{
int a ;
int b ;
}Stack;
typedef 原来的类型 新的类型名
第一种形式是少了新的类型名,语法错误
第二种形式少了结构体的名称有新的类型名,进行类型重定义之后结构体名称可以省略不写,用类型重定义之后的名字来写,符合语法规则
页:
[1]