Linux中数组与结构体的快捷初始化

来源:互联网 发布:股票证券交易分析软件 编辑:程序博客网 时间:2024/06/04 18:15

http://riverdream.blog.51cto.com/1559152/879043


                Linux中数组与结构体的快捷初始化

      最近看了linux内核的一点代码,感受颇深,现在就把数组和结构体初始化的部分简单的记录一下。那么怎么快捷方便的对数组和结构体进行初始化呢?

一、数组快捷初始化
      我们使用的方法有这么几种:

  1. int an_temp[10] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};    //初始化成指定数据到数组 


       或者

  1. int an_temp[10]; memset(an_temp,0,sizeof(int)*10); //数组清零 


      果如数组到长度是128或者更大呢?对于方法二还是可以接受的,若使用方法一把数组初始化成指定内容该怎么办?用循环?有其他方法吗?还有其他方法吗?那么我们就来说一下:
  

  1. int an_temp[128] = {[0 ... 127] = -1}; 

      对,你们没有看错,就是这样,简单吧!有兴趣到朋友可以做个简单到例子。

    

  1. #include <stdio.h> 
  2. int main() 
  3.     int an_temp[128] = {[0 ... 127] = -2}; 
  4.     int i = 0; 
  5.   
  6. for(i=0;i<128;i++) 
  7.     printf("%d\n",an_temp[i]); 
  8.  
  9. return 0; 



二、结构体的初始化
      我们用以下结构体为例子:

  1. struct struct_temp 
  2.           int dd; 
  3.           int cc[128]; 
  4. }; 


 
      我们平常到初始化是这个样子的:

  1. struct struct_temp st_temp; 
  2. memset(&struct_temp,0,sizeof(struct struct_temp)); 


       或者

  1. struct struct_temp st_temp; 
  2. st_temp.dd = -1; 
  3.  int i =0; 
  4. for(i=0;i<128;i++) 
  5.     st_temp.cc[i] = -1; 



      对于第二种方法,有没有更方便到呢?当然有,如下:

  1. struct struct_temp st_temp = {.dd=-1, .cc[0 ... 127] = -2}; 


      这种方法我们都可以调换初始化的顺序,如下:

  1. struct struct_temp st_temp = {.cc[0 ... 127] = -2, .dd=-1}; 


 
三、结构体数组的初始化
      数组到快捷初始化,结构体到初始化都了解了,那么结构体数组到初始化呢?就是以上两种方法到组合。感兴趣的朋友可以自己写个小例子,这里我就不说了,免的大家嫌我罗嗦。

四、扩展阅读

        想想是否还有类似于其他的呢?有的,看下面的例子。

  1. int dd = 1; 
  2. switch(dd) 
  3. case 0 ... 9: 
  4.        printf("case:%d\n",dd); 
  5.        break
  6. default
  7.         printf("default:5d\n",dd); 

        这样,我们就可以很方便的判断小于0大于9的数了,哈哈,超级方便。


原创粉丝点击