zoukankan      html  css  js  c++  java
  • 指定初始化项目(C99)

    C99增加了一种新特性:指定初始化项目(designated initializer)。此特性允许选择对某些元素进行初始化。

    数组的指定初始化项目

    例如:要对数组的最后一个元素初始化。按照传统的C初始化语法,需要对每一个元素都初始化之后,才可以对最后的元素进行初始化:

    int arr[6] = {0, 0, 0, 0, 0, 212} // 传统语法

    而C99规定,在初始化列表中使用带有方括号的元素下标可以指定某个特定的元素:

    int arr[6] = {[5] = 212}; // 把arr[5]初始化为212

    对于通常的初始化,在初始化一个或多个元素后,未经初始化的元素都将被设置为0。

    附加的指定初始化规则:

    1. 如果在一个指定初始化项目后跟有不止一个值,则这些数值将用来对后续的数组元素初始化。

    2. 如果多次对一个元素进行初始化,则最后的一次有效。

    代码示例:

    // 使用指定初始化项目
    #include <stdio.h>
    
    #define MONTHS = 12
    
    int main (void)
    {
        int days[MONTHS] = {31, 28, [4] = 31, 30, 31, [1] = 29};
        int i;
    
        for (i = 0; i < MONTHS; i++)
            printf("%2d %d\n", i + 1; days[i]);
    
        return 0;
    }
    

    输出:

    1  31
    2  29
    3  0
    4  0
    5  31
    6  30
    7  31
    8  0
    9  0
    10 0
    11 0
    12 0

    结构的指定初始化项目

    C99支持结构的指定初始化项目,其语法与数组的指定初始化项目相似。只是,结构的指定初始化项目使用点运算符和成员名来标识具体的元素。例如,只初始化book结构的成员value,可以这样做:

    struct book surprise = {.value = 10.99};

    可以按照任意的顺序使用指定初始化项目。跟在一个指定初始化项目之后的常规初始化项目为跟在指定成员之后的成员提供了初始值。另外,对特定成员的最后一次赋值是它实际获得的值:

    struct book gift = { .value = 18.90,
        .author = "James Broadfool",
        0.25
    };

    这将把值0.25赋给成员value,因为它在结构声明中紧跟在author成员之后。新的值0.25代替了早先的赋值18.90。

    ref: 《C Primer Plus》

  • 相关阅读:
    JVM、GC与HashMap
    自己用到的相关Linux命令,谨以记录
    HashMap
    Groovy简洁开发,我用到的简洁之处
    java,大数据批量插入、更新
    JDBC远程从一个MySql数据库中的一张表里面读出数据(这个数据库需要用SSH隧道连接,大约8W条数据),然后分别插入到另一个数据库中的两张表里
    maven安装 maven上传jar包到库里面
    关于java中是引用传递还是值传递的问题
    SQL优化
    servlet生命周期与工作原理
  • 原文地址:https://www.cnblogs.com/qwertWZ/p/2863458.html
Copyright © 2011-2022 走看看