C語言騷操作:結構體初始化方法

Koma_Wong發表於2018-09-01

首先定義倆結構體:

typedef struct 
{
	int a0;
	int b0;
}S0;

typedef struct 
{
	int a1;
	int b1;
	S0 s0;
}S1;

首先想到的初始化方法是:

S0 s;
s.a0 = 1;
s.b0 = 2;
S1 ss;
ss.a1 = 3;
ss.b1 = 4;
ss.s0 = s;

或者是:

S0 s = {1, 2};
S1 ss= {3, 4, s};

但是很多人不知道其實還可以這樣初始化(用大括號括起來的病省略掉結構體名字的初始化方法,同樣適用於結構體陣列的初始化):

S0 s0 = {
	.a0 = 1,
	.b0 = 2,
};

S1 s1[10] = {
	[0 ... 9] = {
		.a1 = 3,
		.b1 = 4,
		.s0 = s0,
	}
};

這種結構體陣列初始化不要太方便的說。直接用這個點省略繁瑣的結構體名,更有陣列直接使用省略號初始化。

整體的程式碼:

#include <stdio.h>
#include <stdlib.h>

typedef struct 
{
	int a0;
	int b0;
}S0;

typedef struct 
{
	int a1;
	int b1;
	S0 s0;
}S1;

int main(int argc, char **argv)
{
	
	S0 s0 = {
		.a0 = 1,
		.b0 = 2,
	};
	
	S1 s1[10] = {
		[0 ... 9] = {
			.a1 = 3,
			.b1 = 4,
			.s0 = s0,
		}
	};
	
	printf("%d\n", s1[2].s0.a0);
	
	return 0;
}

 

相關文章