在C90标准中,我们必须以固定顺序初始化数组,例如在位置0、1、2等处的初始化索引。从C99标准开始,他们在C语言中引入了指定的初始化功能。在这里,我们可以按随机顺序初始化元素。可以使用数组索引或结构成员来完成初始化。此扩展未在GNU C ++中实现。
如果我们指定一些索引并放入一些值,那么它将看起来像这样-
int arr[6] = {[3] = 20, [5] = 40}; or int arr[6] = {[3]20, [5]40};
这等效于:
int arr[6] = {0, 0, 0, 20, 0, 40};
我们还可以使用以下语法放置一定范围的元素:[first…last] =值。
int arr[6] = {[2 … 4] = 10};
这等效于:
int arr[6] = {0, 0, 10, 10, 10, 0};
如果未定义数组的大小,则可以从最大索引位置获取大小。让我们看一下代码以获得更好的主意。
#include <stdio.h> int main() { int Array[] = {10, 20, 30, [3 ... 9] = 100, [10] = 65, 15, [80] = 50, [42] = 400 }; int i; for (i = 0; i < 20; i++) printf("%d ", Array[i]); printf("\nArray[%d] = %d\n",80, Array[80]); printf("Array[%d] = %d\n",42, Array[42]); printf("Size of this array: %ld\n", sizeof(Array) / sizeof(Array[0])); }
输出结果
10 20 30 100 100 100 100 100 100 100 65 15 0 0 0 0 0 0 0 0 Array[80] = 50 Array[42] = 400 Size of this array: 81
也可以对结构或联合类型对象执行此指定的初始化。对于它们,我们可以使用成员变量的名称(以任意顺序在开头加一个点(。))来初始化变量。为了获得清晰的主意,请检查以下代码。
#include <stdio.h> struct myStruct { int x; float y; char z; }; int main() { struct myStruct str1 = {.y = 2.324, .z = 'f', .x = 78}; struct myStruct str2 = {.z = 'r'}; printf ("x = %d, y = %f, z = %c\n", str1.x, str1.y, str1.z); printf ("z = %c\n", str2.z); }
输出结果
x = 78, y = 2.324000, z = f z = r