【C/C++】结构体定义:struct和typedef struct的区别

前言

数据结构没学好,重新看一遍,发现老师给的ppt的代码好像有点问题,虽然能运行,但是有报错。而且我没搞懂花括号前面和后面是不是都是命名,也没搞懂struct和typedef struct的区别。看了几篇文章,终于搞懂了,总结一下。
啦啦啦

warning C4091: “typedef ”: 没有声明变量时忽略“node”的左侧

定义

struct 名称 {
    // 成员
};
typedef struct 名称 {
    // 成员
} 别名;

无typedef的声明方式

// 有名字的结构体
struct s1 {
    int a;
};

// 匿名结构体
// S1是变量,不是变量类型,这种适合那种很简单的结构体或者仅仅使用一次的结构体
struct {
    int a;
}S1;

// 有名字也有变量的结构体
// 跟第一种一样,只是声明结构体后立即创建变量S1
struct s1 {
    int a;
}S1;

注意,花括号后面是变量,不是别名

有typedef的声明方式

// 有名字但没有别名的结构体 不存在这种
// vs2015中运行会忽略掉typedef
//typedef struct s2{
//    int a;
//};

// 没有名字但有别名的结构体
// 带typedef的匿名结构体
typedef struct {
    int a;
} S2;

// 有名字也有别名的结构体
typedef struct s3 {
    int a;
} S3;

定义变量

// C/C++ 支持这些写法:
// 使用 struct + 名字定义
struct s1 v1;
struct s3 v3;
// 使用别名定义
S2 v2;
S3 v3;
 
// C++ 支持这些写法:
// 兼容 C 语言的写法
struct s1 v1;
struct s3 v3;
S2 v2;
S3 v3;
// C++ 允许省略 struct 关键字
s1 v1;
s3 v3;

有typedef的第三种结构体(有名字也有变量的结构体)

别名 == struct 名称
S3 == struct s3

访问成员

定义完变量后,直接

变量名.成员
S1.a=10;
v1.a=10;

参考文章

[1] https://bbs.csdn.net/topics/392188945
[2] https://www.cnblogs.com/ericwannn/p/10548186.html
[3] https://www.cnblogs.com/qyaizs/articles/2039101.html

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页