嵌入式 Linux C ARM 我用 LinuxLinux

GNU C语法扩展(7)

2019-02-20  本文已影响4人  Leon_Geo

一、指定初始化

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 };
//切记...前后各有一个空格
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;
};
上一篇下一篇

猜你喜欢

热点阅读