文章目录

  • 指定结构体初始化器(Designated Initializers)
    • 背景
    • 初始化struct
    • 初始化union
  • 对于重复初始化的说名

本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。

指定结构体初始化器(Designated Initializers)

背景

在ISO C90中,初始化数组或者结构体要求每个元素按照固定的顺序出现,带来的问题就是如果我们想初始化数组或结构体中的某个元素,那我们必须也手动初始化这个元素之前的元素。

在ISO C99中,你可以使用数组下标或者结构体的成员名实现乱序初始化,并且GNU C对这个功能进行了扩展,使得在C90中也可以使用。

初始化struct

通过结构体成员名初始化结构体 “.fieldname =”,例如下面的code

struct point { int x, y; };struct point p = { .y = yvalue, .x = xvalue };
//等价于
struct point p = { xvalue, yvalue };

还有一种初始化方式“fieldname:”,但是这种方式在GCC 2.5中已经不推荐使用了。

看下面一段code

#include<stdio.h>struct point { int x, y; };int main(void)
{struct point pt={.y=2};printf("pt.x = %d \n",pt.x); printf("pt.y = %d \n",pt.y); return 0;
}

输出如下:

这段code中我们并没有显示初始化成员变量x,这种情况下编译器会自动初始化该变量为0

我们可以结合“.fieldname” 和“[index]”来初始化一个数组,看下面的code

struct point { int x, y; };struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };

初始化union

同理对于struct的初始化工作,同样可以应用在union上,例如下面的code

union foo { int i; double d; };union foo f = { .d = 4 };

对于重复初始化的说名

  • 如果struct中相同的field被多次初始化,则使用最后被修改的值作为初始化的值;
  • 或者union中的overlapping fields被多次初始化,则使用最后被修改的值作为初始化的值。

C语言面试干货——指定数组初始化器(GCC手册解析)


C语言面试干货——指定结构体初始化器(GCC手册解析)相关推荐

  1. C语言骚操作:结构体初始化方法

    首先定义俩结构体: typedef struct {int a0;int b0; }S0;typedef struct {int a1;int b1;S0 s0; }S1; 首先想到的初始化方法是: ...

  2. c++ 结构体初始化_【干货】c语言基础语法——结构体

    1.关于C语言结构体的引入 学习环境搭建1_Linux C语言_嵌入式开发工程师-创客学院​www.makeru.com.cn 在实际问题中有时候我们需要几种数据类型一起来修饰某个变量. 例如一个学生 ...

  3. c语言 结构体 初始化,C语言结构体初始化

    C语言结构体初始化教程 在 C语言结构体初始化 语法 struct structName varName = {fileldValue1, fileldValue2, fileldValue3}; 参 ...

  4. 【C语言|结构体】关于结构体初始化赋值

    在GUN C中,支持通过标号元素来对指定结构体成员名进行初始化,这允许初始化值以任意顺序出现. 在Linux内核中对init_mm初始化时有如下代码. #define INIT_MM_CONTEXT( ...

  5. go结构体初始化_Go语言初始化结构体的成员变量

    结构体在实例化时可以直接对成员变量进行初始化,初始化有两种形式分别是以字段"键值对"形式和多个值的列表形式,键值对形式的初始化适合选择性填充字段较多的结构体,多个值的列表形式适合填 ...

  6. C语言结构体初始化的几种方法

    一.介绍 结构体作为数据结构的基础,经常使用,其中初始化也有几种方法,这里详细介绍 二.常规初始化(先定义再初始化) typedef struct {int bandrate;int databits ...

  7. Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)

    1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...

  8. C 语言编程 — 高级数据类型 — 结构体与位域

    目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...

  9. 详解C语言自定义类型(结构体,位段,枚举,联合)

    C语言中有许多类型,比如整形int,字符型char,双精度浮点型double等等.这些类型可以存放一些值或者字符.但是如果我想要一种类型存放一本书,显然是没有的,那么这时候就需要自定义类型了,也就是结 ...

最新文章

  1. AI一分钟 | 美国国会传唤扎克伯格:来,就5000万用户数据泄露案作证;菜鸟无人车路测视频曝光
  2. linux 7 没有权限访问,技术|RHCSA 系列(十三): 在 RHEL 7 中使用 SELinux 进行强制访问控制...
  3. Redis Sentinel配置小记
  4. 『设计模式』工厂方法模式
  5. pic pwm 占空比可调 源码_PIC16F914输出可调占空比PWM波形程序
  6. Path画直线与弧线
  7. 计算机最大化快捷键,Win7笔记本电脑窗口最大化和最小化的快捷键是什么
  8. 三角形面积的叉积公式
  9. ffmpeg -progress读取进度
  10. 异常:could not initialize proxy - the owning Session was closed
  11. Handsontable 给力的仿Excel JQuery插件
  12. 第二次作业,制作调查问卷
  13. Mind Manager 13 值得购买吗?一次糟糕的购物体验
  14. 【C】少年时代的经典游戏:三子棋
  15. 深入了解物联网,这几个物联网技术了解吗?
  16. 百度地图:为标记添加点击事件显示标注
  17. 【MySQL】DDL(Data Definition Language)数据定义语言之操作数据库
  18. 腾讯云、AWS、阿里云哪家云好
  19. 意群是记忆的最小单位
  20. 大华linux密码忘记,乌班图16.04 安装DSS正确方法(已验证安装成功)

热门文章

  1. C语言进阶-ifndef的用法
  2. BeagleBone 可编程实时单元(PRU)控制 GPIO 和 UART
  3. setTimeout 用法
  4. Python 利用深度学习做文本摘要
  5. 大二学生HTML期末大作业——HTML+CSS+JavaScript食品网上超市购物商城网页与制作
  6. 绿色软件游戏必备,DLL动态链接库大全
  7. 程序员 Homebrew 使用指北
  8. AutoRunner场景异常处理
  9. 电大计算机英语二,2013年考研英语二真题及答案解析.pdf
  10. Flask学习笔记(四):基于Flask网页显示图片