在C語言中,初始化器(Initializer)是一種特殊的語法,用于在變量定義時設置初始值。對于不同類型的變量(如基本類型、數組、結構體和聯合體),初始化器的用法有所不同。
1. 基本類型
對于基本數據類型,比如int
、float
等,初始化很簡單,只需在聲明變量的同時賦予它一個值:
int a = 10;
float b = 3.14f;
2. 數組
對于數組,可以初始化所有元素或數組的一部分:
int numbers[] = {1, 2, 3, 4, 5}; // 初始化一個有5個元素的數組
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 初始化一個2x3的矩陣
3. 結構體和聯合體
對于結構體(struct)和聯合體(union),可以初始化它們的成員:
struct Point {int x;int y;
};struct Point p = {10, 20}; // 初始化結構體的兩個成員// C99后,使用指定初始化器語法來初始化特定成員
struct Point p1 = {.y = 20, .x = 10}; // 成員可以不按聲明順序初始化
聯合體初始化類似,但只能初始化第一個成員,因為聯合體中的所有成員共用同樣的內存位置。
4. 指定初始化器(Designated Initializers)
C99標準引入了指定初始化器,這使得在初始化數組和結構體時可以指定某個特定成員或索引的初始值:
int numbers[10] = {[0] = 1, [9] = 10}; // 只初始化第一個和最后一個元素
struct Point point = {.x = 5}; // 其他成員如未指定將被初始化為零值
注意: 這里的
int numbers[10] = {[0] = 1, [9] = 10}; // [0] = 1, [9] = 10 這種初始化語法 可以對數組的指定對象進行初始化
struct Point point = {.x = 5}; // 其他成員如未指定將被初始化為零值
然后 再結合宏定義使用
如:
#define TABLE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? [0] = {.name = "W25Q128JV", .spi.name = "SPI0"}, ? ? ? ? ?
}
static struct_flash table[] = TABLE; //實現對 結構體數組中的指定序號的對象初始化
然后再結合 枚舉 使用
enum {
? ? DEVICE_INDEX = 0,
};
#define TABLE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? [DEVICE_INDEX ] = {.name = "W25Q128JV", .spi.name = "SPI0"}, ? ? ? ? ?
}
、、、、、、、、、、、、、、、、、、、、、
static struct_flash table[] = TABLE;