c 与 c++ struct 与赋值方式
在 C 语言和 C++ 语言中,结构体的使用确实存在一些差异,特别是在结构体类型名称的使用上。具体而言:
-
C 语言: 在 C 语言中,声明和使用结构体变量时,通常需要使用
struct
关键字,除非你使用typedef
为结构体定义了一个别名。 -
C++ 语言: 在 C++ 语言中,
struct
关键字在定义结构体类型时使用,但在声明结构体变量时可以省略struct
关键字。
示例
在 C 语言中
c
如果你希望在 C 语言中省略 struct
关键字,可以使用 typedef
为结构体定义一个别名:
c
在 C++ 语言中
在 C++ 中,不需要 typedef
也可以直接使用结构体类型名称来声明变量:
cpp
总结
- C 语言: 在声明结构体变量时需要使用
struct
关键字,除非你使用typedef
进行类型重命名。 - C++ 语言: 在声明结构体变量时不需要使用
struct
关键字,直接使用结构体类型名称即可。
这使得 C++ 在使用结构体时的语法更加简洁
go
type name struct {
a int
b bool
}
==============================================
https://www.cnblogs.com/dylanchu/p/15876120.html
C语言结构体初始化的几种方法
定义#
struct MY_TYPE
{
int first;
double second;
char* third;
float four;
};
方法一:标准方式 (ANSI C89风格 Standard Initialization)#
struct MY_TYPE foo = {-10,3.141590,"method one",0.25};
需要注意对应的顺序,不能错位。
方法二:逐个赋值#
struct MY_TYPE foo;
foo.first = -10;
foo.second = 3.141590;
foo.third = "method two";
foo.four = 0.25;
因为是逐个确定的赋值,无所谓顺序啦。
方法三:指定初始化(ANSI C99 风格,同样适用于union,array)#
这种方法类似于第一种方法和第二种方法的结合体,既能初始化时赋值,也可以不考虑顺序;
struct MY_TYPE foo = {
.second = 3.141590,
.third = "method three",
.first = -10,
.four = 0.25
};
C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元素或结构体某些成员进行选择性初始化,只需指明它们所对应的数组下标或结构体成员名。
该方法在Linux内核(kernel)中经常使用,FFmpeg中也大量出现。
方法四:指定初始化的另一种风格(ANSI C99风格,或称C++风格)#
这种指定初始化风格和前一种类似,网上称之为C++风格,类似于key-value键值对的方式,同样不考虑顺序。
struct MY_TYPE foo = {
second:3.141590,
third:"method three",
first:-10,
four:0.25
};
参考:
https://www.cnblogs.com/dylanchu/p/15876120.html