zoukankan      html  css  js  c++  java
  • 指定初始化的运用

    我们在拜读Linux内核源代码时,是否会经常遇到一些既熟悉又陌生的C语言语法?
    熟悉是因为我们对Linux内核中使用的C语法绝大部分都能够看懂。陌生是指内核源代码当中的个别语法运用,我们在普通的C教材中并没有提及和说明。
    那么,从今天开始,小编将发表一系列文章具体阐述Linux内核中使用的那些我们那些看起来很陌生的语法。

    一、指定初始化

    1、数组元素的指定初始化

    在标准C中,当我们定义并初始化一个数组时,教材上方法通常如下几种形式:

    //方法1
    int a[10];
    for( i=0; i<10; i++ )
        a[i] = 0;
    
    //方法2
    int a[10] = {0};
    
    //方法3
    int a[10] = { 1, 2, 3 };    //前3个元素赋值为1、2、3,其余为0
    

    但是当数组比较大时,或者非零元素并不连续时,这种方法并不适合。

    比如,我们定义一个拥有100个元素的数组a[100],其中a[10]为1,a[20]到a[30]为2。此时怎么办呢?当然你可以综合单独赋值和for循环赋值来解决,但最牛逼方法如下:

    int a[100] = { [10]=1, [20 ... 30]=2 };
    //切记...前后各有一个空格
    
    • 在标准C中,... 表示范围扩展,不仅可以用于以上数组赋值中,同样也可以用在switch语句的case中:
    switch(i){
        case 1:
            printf("select case 1.");
            break;
        case 2 ... 5:
            printf("selectcase2-5.");
    break;
        case 6:
            printf("select case 6.");
            break;
        default:
            printf("selectdefault.");
    break;
    }
    

    2、结构体元素的指定初始化

    和数组类似,结构体的初始化这是按照顺序初始化的,但同样也可以指定数据域的初始化。

    struct student {
    char name[20];
    int age;
    long id;
    };
    main()
    {
        struct student leon = { "leon",  20, 10414004 };
        struct student aris =
        {
             .age=18;
             .id=10414005;
        }
    return 0;
    };
    
  • 相关阅读:
    将word转化为swf 进行如同百度文库的般阅读
    最大子数组问题——编程珠玑第八章
    为什么静态成员必须在类外初始化
    C++初始化列表
    异步消息总线hornetq学习-03客户端连接hornet进行jms消息的收发-非jndi方式连接
    [PLL][PM]锁相环模拟相位解调
    insertion sort
    SRM 581 D2 L2:SurveillanceSystem,重叠度
    JQuery(下)
    Ajax
  • 原文地址:https://www.cnblogs.com/leon1124/p/14039804.html
Copyright © 2011-2022 走看看