指定初始化的运用

作者: Leon_Geo | 来源:发表于2019-02-14 08:43 被阅读23次

我们在拜读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;
};

相关文章

  • 指定初始化的运用

    我们在拜读Linux内核源代码时,是否会经常遇到一些既熟悉又陌生的C语言语法?熟悉是因为我们对Linux内核中使用...

  • Swift的初始化

    一、初始化器 指定初始化器 1、指定初始化器是主要的初始化器,每个类至少有一个指定初始化器。2、默认初始化器总是类...

  • pytorch 创建tensor的几种方法

    1.指定数值初始化 2.指定分布初始化

  • Designated Initializer

    指定初始化函数注意点: 1. Designated Initializer表示指定初始化函数(唯一的初始化出口)。...

  • java基础--数组

    数组 可以一次存放多个数据 初始化数组 动态初始化(指定长度),指定数组元素的长度 静态初始化,不直接指定数据多少...

  • iOS 中的初始化方法链条

    iOS 初始化方法链条 设计原则:1.根据根本特性设计指定初始化方法2.所有初始化方法根据指定初始化方法初始化 代...

  • Swift5.1学习随笔之初始化器

    初始化器 类、结构体、枚举都可以定义初始化器(init) 类有2种初始化器:指定初始化器、便捷初始化器 指定初始化...

  • JavaScript开发技巧

    1.初始化数组(初始化一个指定长度的一维数组,并指定默认值) 2.初始化一个指定长度的二维数组,并指定默认值 3....

  • swift 之DESIGNATED,CONVENIENCE

    在swift中有两种初始化方法, 1.指定初始化方法 指定初始化方法其实指的就是 init 方法 2.便利初始化方...

  • Ios-细节二:理解`NS_DESIGNATED_INITIAL

    NS_DESIGNATED_INITIALIZER(指定初始化器)。在OC中,对于多个方法实现初始化的时候,会指定...

网友评论

    本文标题:指定初始化的运用

    本文链接:https://www.haomeiwen.com/subject/jfjseqtx.html