程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言的另類結構體賦值

C語言的另類結構體賦值

編輯:關於C

 

這幾天看Linux的內核源碼,突然看到init_pid_ns這個結構體變量的賦值特別奇怪。

 

struct pid_namespace init_pid_ns = {  

    .kref = {  

        .refcount       = ATOMIC_INIT(2), 

    },   

    .pidmap = {  

        [ 0 ... PIDMAP_ENTRIES-1] = { ATOMIC_INIT(BITS_PER_PAGE), NULL } 

    },   

    .last_pid = 0, 

    .level = 0, 

    .child_reaper = &init_task, 

}; 

請注意上面代碼的.pidmap這個結構體數組的賦值形式。

 

[ 0 ... PIDMAP_ENTRIES-1] 

直接拿索引來賦值,而且直接寫出了索引的范圍。有點python的味道。

 

只是記得C語言的函數的可變參數是用的...的方式。沒想過結構體也有這種操作方式。

 

比較感興趣,自己寫了一小段類似的代碼。

 

#include <stdio.h> 

 

struct pid{ 

    int val; 

    void *fn; 

}; 

 

struct str{ 

    int val; 

    struct pid id[10]; 

}; 

 

struct str init_str = {  

    .val = 1, 

    .id = {  

        [ 0 ... 9] = {2, NULL} 

    },   

}; 

 

int main(void){ 

    int i; 

 

    for(i = 0; i < 10; i++) 

        printf("init_str.id[%d].val =  %d\n", i, init_str.id[i].val);    

 

    return 0; 

 

編譯後測試。結果的確是這樣。

 

如果要對結構體數組進行操作,這種方式可以試試

 

摘自 wfing

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved