C中指定的初始值设定项

标准C90要求初始值设定项的元素以固定顺序出现,与正在初始化的数组或结构中元素的顺序相同。 在ISOC99中,您可以按随机顺序给出元素,指定它们所应用的数组索引或结构字段名,GNUC也允许将其作为C90模式的扩展。此扩展在GNU C++中没有实现。 指定 数组索引 “[index]=”或“[index]” 在元素值之前。例如

null
     int a[6] = {[4] = 29, [2] = 15 }; or     int a[6] = {[4]29 , [2]15 };

相当于

     int a[6] = { 0, 0, 15, 0, 29, 0 };

Note:- The index values must be constant expressions.

要将一系列元素初始化为相同的值,请写入 “[first…last]=值” 例如

int a[] = {[0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

资料来源: gcc。gnu。组织

C

// C program to demonstrate designated initializers
// with arrays.
#include <stdio.h>
void main( void )
{
int numbers[100] = {1, 2, 3, [3 ... 9] = 10,
[10] = 80, 15, [70] = 50, [42] = 400 };
int i;
for (i = 0; i < 20; i++)
printf ( "%d " , numbers[i]);
printf ( "%d " , numbers[70]);
printf ( "%d" , numbers[42]);
}


输出:

1 2 3 10 10 10 10 10 10 10 80 15 0 0 0 0 0 0 0 0 50 400 

说明:

  • 在本例中,前三个元素分别初始化为1、2和3。
  • 第四到第十个元素的值为10。
  • 然后第11个元素被初始化为80。
  • 下一个元素(12)被初始化为15。
  • 元素编号70(第71个)初始化为50,元素编号42(第43个)初始化为400。
  • 与正常初始化一样,所有未初始化的值都设置为零。

注:-

  1. 这些初始值设定项不需要按顺序出现。
  2. 数组的长度是指定的最大值加1。

C

// C program to demonstrate designated initializers
// to determine size of array.
#include <stdio.h>
void main( void )
{
int numbers[] = {1, 2, 3, [10] = 80, 15,
[70] = 50, [42] = 400 };
int n = sizeof (numbers) / sizeof (numbers[0]);
printf ( "%d" , n);
}


输出:

71

说明: 如果没有给出数组的大小,则最大的初始化位置决定数组的大小。 在里面 结构 协会 : 在结构初始值设定项中,指定要初始化的字段的名称 ‘.fieldname=’或’fieldname:’ 在元素值之前。例如,给定以下结构,

     struct point { int x, y; };

下面的初始化

     struct point p = { .y = 2, .x = 3 }; or     struct point p = { y: 2, x: 3 };

相当于

     struct point p = { 2, 3 };

C

// C program to demonstrate designated
// initializers with structures
#include <stdio.h>
struct Point
{
int x, y, z;
};
int main()
{
// Examples of initialization using
// designated initialization
struct Point p1 = {.y = 0, .z = 1, .x = 2};
struct Point p2 = {.x = 20};
printf ( "x = %d, y = %d, z = %d" ,
p1.x, p1.y, p1.z);
printf ( "x = %d" , p2.x);
return 0;
}


输出:

x = 2, y = 0, z = 1x = 20

我们还可以为数组和结构组合指定的初始值设定项。

C

// C program to demonstrate designated initializers
// with structures and arrays combined
#include <stdio.h>
void main( void )
{
struct point { int x, y; };
struct point pts[5] = { [2].y = 5, [2].x = 6, [0].x = 2 };
int i;
for (i = 0; i < 5; i++)
printf ( "%d %d" , pts[i].x ,pts[i].y);
}


输出:

2 00 06 50 00 0

参考: https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享