GNU C语法扩展(7)
  xfEU0RRJpeyr 2023年11月02日 71 0




GNU C语法扩展(7)_赋值


要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。

七、指定初始化

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;
};

===========我是华丽的分割线===========

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  JBfJ5LpBD0AJ   2023年11月13日   23   0   0 初始化链表#define
  b1UHV4WKBb2S   2023年11月13日   27   0   0 阴影模糊数组
  nQkVcpdWfLDr   2023年11月13日   40   0   0 数组sort函数python
  M9aMEIE19lAW   2023年11月13日   31   0   0 php数组
xfEU0RRJpeyr