用我们的决心、信心和毅力来培植我们的生命之花|

3的4次方

园龄:2年1个月粉丝:5关注:89

2023-05-20 23:36阅读: 94评论: 0推荐: 0

C语言初始化在开发中的几种写法

C语言初始化在开发中的几种写法

参考:C语言结构体初始化的四种方法_ericbars的博客-CSDN博客

使用memset函数

用于赋值为全0:

struct sockaddr_in cliaddr;
memset(&cliaddr, 0, sizeof(cliaddr));

使用{}列表初始化

struct InitMember test = {-10,3.141590"method one"0.25};
struct sockaddr_in cliaddr = {}; // 初始化为全0

结构体初始化时成员名前加.的写法

乱序赋值:

static struct platform_driver dm9000_driver = {
.driver = {
.name = "dm9000",
.pm = &dm9000_drv_pm_ops,
.of_match_table = of_match_ptr(dm9000_of_matches),
},
.probe = dm9000_probe,
.remove = dm9000_drv_remove,
};

可以看到,在初始化时使用了.结构体成员名的写法。

这是GCC编译器支持的写法,用于初始化结构体成员时可以不按照成员的定义顺序,例:

struct atag_tcc_entry {
char output;
char resolution;
};
struct atag_tcc_entry tcc_param = {
.output = 0,
.resolution = 0,
};

上面初始化可写为(以下是赋值,与初始化有本质区别):

struct atag_tcc_entry tcc_param;//定义结构变量
//分别初始化成员
atag_tcc_entry tcc_param.output = 0;
atag_tcc_entry tcc_param.resolution = 0;

数组初始化使用[]的写法

使用VSCODE将鼠标放在最后的花括号上,能显示初始化后的具体含义:

image

其中,SYS_xxx 是一些宏,表示System call numbers。经过查找,这是GCC编译器特有的无序初始化数组的方式:

image

在声明数组时,可以通过在一组花括号中列出初始化值(用逗号分隔)来初始化数组中的元素。这里有一个例子:

int my_array[5] = { 0, 1, 2, 3, 4 };

你不必显式地初始化所有数组元素。例如,这段代码初始化指定的前三个元素,然后初始化最后两个元素为默认值0:

int my_array[5] = { 0, 1, 2 };

当使用ISO C99或带有GNU扩展的C89时,您可以通过指定要初始化的数组下标来无序地初始化数组元素。为此,将数组下标括在括号中,并可选地在值之前加上赋值操作符。这里有一个例子:

int my_array[5] = { [2] 5, [4] 9 };

或者,使用赋值操作符:

int my_array[5] = { [2] = 5, [4] = 9 };

这两个例子都等价于:

int my_array[5] = { 0, 0, 5, 0, 9 };

当使用GNU扩展时,您可以将一系列元素初始化为相同的值,通过指定第一个和最后一个索引,格式为 [first] ... [last] 。这里有一个例子:

int new_array[100] = { [0 ... 9] = 1, [10 ... 98] = 2, 3 };

初始化元素0到9到1,初始化元素10到98到2,初始化元素99到3。(你也可以显式地写 [99] = 3.) 另外,注意你必须在"..."的两边有空格。

参考自:The GNU C Reference Manual

本文作者:3的4次方

本文链接:https://www.cnblogs.com/3to4/p/17418045.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   3的4次方  阅读(94)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起