C 中的指定初始化器
在 C90 标准中,我们按照固定的顺序初始化数组,例如初始化位置 0、1、2 等索引。从 C99 标准开始,在 C 中引入了指定初始化特性。在这里,我们可以按任意顺序初始化元素。初始化可以使用数组索引或结构成员来完成。GNUC++ 中未实现此扩展。
如果我们指定某些索引并放入一些值,那么它将看起来像这样 -
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] = value。
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("
Array[%d] = %d
",80, Array[80]);
printf("Array[%d] = %d
",42, Array[42]);
printf("Size of this array: %ld
", 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
", str1.x, str1.y, str1.z);
printf ("z = %c
", str2.z);
}输出
x = 78, y = 2.324000, z = f z = r
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP