C語言中構造資料型別的初始化

2021-06-19 17:02:28 字數 911 閱讀 1325

我們都知道,一維陣列的靜態初始化可以寫成

int a = ;
其實,可以指定陣列元素進行初始化,比如

int a = ;
這種技巧在某些情況下其實很有用:(1)只想初始化陣列中一些非連續的元素,其它元素都為0;(2)需要根據一組#define作為陣列下標來保持某種對映關係的時候,就此我們舉個例子。

比如要定義一組錯誤碼和錯誤碼提示的字串,我們可以用#define來定義錯誤碼,將錯誤碼作為錯誤提示字串陣列的下標,

/* 錯誤碼定義 */

#define einval 1

#define enomem 2

#define efault 3

/* 錯誤提示字串 */

char *err_str = ;

對於這種情況,我們改變#define的值,都可以對err_str可以方便地不用做任何修改地使用索引。

我們可以用欄位名稱對結構體進行初始化,這種方法在linux核心源**中使用非常普遍,比如

static const struct file_operations mycdev_fops = ;
這段**常用於字元裝置驅動程式的設計中,owner、read等都是struct file_operations的成員變數(資料型別是函式指標),這裡直接使用欄位名稱完成函式指標型別的結構體成員的初始化。

再給個簡單的例子,定義座標,

struct point
我們可以這樣初始化struct point,

struct point p = ;

這種使用欄位名進行初始化的方法同樣適用於union型別。

C語言中的初始化問題

經常在c語言工程中,尤其是比較大的程式,執行過程中會出現由於記憶體或堆疊導致的各種問題,輸出錯誤或執行崩潰 1.字串陣列的初始化 1 char str 10 2 char str 10 3 char str 10 str 0 0 2.字元陣列的初始化 int a 5 錯誤 int a 5 只有第乙個...

C語言中結構體的初始化

大全 建議在變數定義的時候進行初始化,但是很多人,特別是新人對結構體或者結構體陣列定義是一般不會初始化,或者不知道怎麼初始化。1 初始化 typedef struct test t test t test t gst 可以初始化,設定i為1,s為乙個字串.test t gst 初始化個數少於實際個數...

c語言中結構體的初始化

struct initmember struct initmember test 需要注意對應的順序,不能錯位。struct initmember test test.first 10 test.second 3.141590 test.third method two test.four 0.25...