C语言面试干货——指定结构体初始化器(GCC手册解析)
文章目录
- 指定结构体初始化器(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手册解析)相关推荐
- C语言骚操作:结构体初始化方法
首先定义俩结构体: typedef struct {int a0;int b0; }S0;typedef struct {int a1;int b1;S0 s0; }S1; 首先想到的初始化方法是: ...
- c++ 结构体初始化_【干货】c语言基础语法——结构体
1.关于C语言结构体的引入 学习环境搭建1_Linux C语言_嵌入式开发工程师-创客学院www.makeru.com.cn 在实际问题中有时候我们需要几种数据类型一起来修饰某个变量. 例如一个学生 ...
- c语言 结构体 初始化,C语言结构体初始化
C语言结构体初始化教程 在 C语言结构体初始化 语法 struct structName varName = {fileldValue1, fileldValue2, fileldValue3}; 参 ...
- 【C语言|结构体】关于结构体初始化赋值
在GUN C中,支持通过标号元素来对指定结构体成员名进行初始化,这允许初始化值以任意顺序出现. 在Linux内核中对init_mm初始化时有如下代码. #define INIT_MM_CONTEXT( ...
- go结构体初始化_Go语言初始化结构体的成员变量
结构体在实例化时可以直接对成员变量进行初始化,初始化有两种形式分别是以字段"键值对"形式和多个值的列表形式,键值对形式的初始化适合选择性填充字段较多的结构体,多个值的列表形式适合填 ...
- C语言结构体初始化的几种方法
一.介绍 结构体作为数据结构的基础,经常使用,其中初始化也有几种方法,这里详细介绍 二.常规初始化(先定义再初始化) typedef struct {int bandrate;int databits ...
- Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)
1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...
- C 语言编程 — 高级数据类型 — 结构体与位域
目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...
- 详解C语言自定义类型(结构体,位段,枚举,联合)
C语言中有许多类型,比如整形int,字符型char,双精度浮点型double等等.这些类型可以存放一些值或者字符.但是如果我想要一种类型存放一本书,显然是没有的,那么这时候就需要自定义类型了,也就是结 ...
最新文章
- AI一分钟 | 美国国会传唤扎克伯格:来,就5000万用户数据泄露案作证;菜鸟无人车路测视频曝光
- linux 7 没有权限访问,技术|RHCSA 系列(十三): 在 RHEL 7 中使用 SELinux 进行强制访问控制...
- Redis Sentinel配置小记
- 『设计模式』工厂方法模式
- pic pwm 占空比可调 源码_PIC16F914输出可调占空比PWM波形程序
- Path画直线与弧线
- 计算机最大化快捷键,Win7笔记本电脑窗口最大化和最小化的快捷键是什么
- 三角形面积的叉积公式
- ffmpeg -progress读取进度
- 异常:could not initialize proxy - the owning Session was closed
- Handsontable 给力的仿Excel JQuery插件
- 第二次作业,制作调查问卷
- Mind Manager 13 值得购买吗?一次糟糕的购物体验
- 【C】少年时代的经典游戏:三子棋
- 深入了解物联网,这几个物联网技术了解吗?
- 百度地图:为标记添加点击事件显示标注
- 【MySQL】DDL(Data Definition Language)数据定义语言之操作数据库
- 腾讯云、AWS、阿里云哪家云好
- 意群是记忆的最小单位
- 大华linux密码忘记,乌班图16.04 安装DSS正确方法(已验证安装成功)