Machine-translated by Google. Questions are authored in English.
Top

Discussion

Pick the best statement for the below program:

#include "stdio.h"
 
int main()
{
 struct {int a[2], b;} arr[] = {[0].a = {1}, [1].a = {2}, [0].b = 1, [1].b = 2};
 
 printf("%d %d %d and ",arr[0].a[0],arr[0].a[1],arr[0].b);
 printf("%d %d %d\n",arr[1].a[0],arr[1].a[1],arr[1].b);
 
 return 0;
}

 

  • A.Compile error because struct type (containing two fields i.e. an array of int and an int) has been specified along with the definition of array arr[] of this struct type.
  • B.Compile error because of incorrect syntax for initialization of array arr[].
  • C.No compile error and two elements of arr[] would be defined and initialized. Output would be “1 0 1 and 2 0 2”.
  • D.No compile error and two elements of arr[] would be defined and initialized. Output would be “1 X 1 and 2 X 2” where X is some garbage random number.

Answer: C

Correct answer: No compile error and two elements of arr[] would be defined and initialized. Output would be “1 0 1 and 2 0 2”.

The initialiser uses designated initialisers with array indices: [0].a = {1}, [1].a = {2} and so on. This is valid C99, and it sizes arr at two elements, since index 1 is the highest named. Everything not explicitly initialised is zero-filled, so a[1] is 0 in both - giving 1 0 1 and 2 0 2.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.