通过使用“逐个元素”和“放置”来初始化阵列时出现意外输出“指定”技术在一起

时间:2013-06-29 20:51:37

标签: c arrays array-initialization

C99提供了使用element-by-element和&amp ;;初始化数组的功能。 designated 方法一起作为:

int a[] = {2,1,[3] = 5,[5] = 9,6,[8] = 4};

运行代码时:

#include <stdio.h>

int main()
{
   int a[] = {2,1,[3] = 5,[0] = 9,4,[6] = 25};
   for(int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
          printf("%d    ",a[i]);

   return 0;
 }

注意 Element 0初始化为2,然后由指定人[0]再次初始化 到9) 我原以为element 02)将被9替换(作为指示符[0] = 9) 因此o / p将成为

   9    1   0   5   4   0   25

不幸的是我错了,因为o / p来了;

   9    4   0   5   0   0   25

对意外o / p的任何解释?

2 个答案:

答案 0 :(得分:3)

使用指定的初始值设定项与元素初始值设定项相结合意味着基于指定的初始值设定项的位置。

所以,如果你这样做:

int a[] = {2, 1, [3] = 5, 6};

结果应该是:

2 1 0 5 6

2 1 0 6

请注意,6占据初始值设定项中的位置3,但其结果位置由前面指定的初始值设定项(使用位置3)隐含。指定初始化程序使用的位置后面的位置是4,因此这是放置6的位置。

答案 1 :(得分:1)

使用初始化程序初始化数组的过程基本上是:

  1. 将索引计数器设置为0,并将整个数组初始化为0s
  2. 从左到右遍历初始化元素
  3. 如果初始化元素具有指定的索引,则将索引计数器设置为指定的索引
  4. 将初始化元素值存储在索引计数器
  5. 指定的索引处
  6. 递增索引计数器
  7. 如果还有更多初始化元素,请返回步骤3。