Structure & Union


12
Question 1
#include‹stdio.h›
int main()
{
    struct site
    {
        char name[] = "GeeksQuiz";
        int no_of_pages = 200;
    };
    struct site *ptr;
    printf("%d ", ptr->no_of_pages);
    printf("%s", ptr->name);
    getchar();
    return 0;
}
A
200 GeeksQuiz
B
200
C
Runtime Error
D
Compiler Error
Structure & Union    
Discuss it


Question 1 Explanation: 
When we declare a structure or union, we actually declare a new data type suitable for our purpose. So we cannot initialize values as it is not a variable declaration but a data type declaration.
Question 2
Assume that size of an integer is 32 bit. What is the output of following program?
#include<stdio.h>
struct st
{
    int x;
    static int y;
};

int main()
{
    printf("%d", sizeof(struct st));
    return 0;
}
A
4
B
8
C
Compiler Error
D
Runtime Error
Structure & Union    
Discuss it


Question 2 Explanation: 
In C, struct and union types cannot have static members. In C++, struct types are allowed to have static members, but union cannot have static members in C++ also.
Question 3
struct node 
{ 
   int i; 
   float j; 
}; 
struct node *s[10];
The above C declaration define 's' to be (GATE CS 2000)
A
An array, each element of which is a pointer to a structure of type node
B
A structure of 2 fields, each field being a pointer to an array of 10 elements
C
A structure of 3 fields: an integer, a float, and an array of 10 elements
D
An array, each element of which is a structure of type node.
Structure & Union    
Discuss it


Question 3 Explanation: 
Question 4
Consider the following C declaration
struct { 
    short s[5];
    union { 
         float y; 
         long z; 
    }u; 
} t;
Assume that objects of the type short, float and long occupy 2 bytes, 4 bytes and 8 bytes, respectively. The memory requirement for variable t, ignoring alignment considerations, is (GATE CS 2000)
A
22 bytes
B
14 bytes
C
18 bytes
D
10 bytes
Structure & Union    
Discuss it


Question 4 Explanation: 
Short array s[5] will take 10 bytes as size of short is 2 bytes. When we declare a union, memory allocated for the union is equal to memory needed for the largest member of it, and all members share this same memory space. Since u is a union, memory allocated to u will be max of float y(4 bytes) and long z(8 bytes). So, total size will be 18 bytes (10 + 8).
Question 5
#include<stdio.h> 
struct st 
{ 
    int x; 
    struct st next; 
}; 
  
int main() 
{ 
    struct st temp; 
    temp.x = 10; 
    temp.next = temp; 
    printf("%d", temp.next.x); 
    return 0; 
}
A
Compiler Error
B
10
C
Runtime Error
D
Garbage Value
Structure & Union    
Discuss it


Question 5 Explanation: 
A structure cannot contain a member of its own type because if this is allowed then it becomes impossible for compiler to know size of such struct. Although a pointer of same type can be a member because pointers of all types are of same size and compiler can calculate size of struct
Question 6
Which of the following operators can be applied on structure variables?
A
Equality comparison ( == )
B
Assignment ( = )
C
Both of the above
D
None of the above
Structure & Union    
Discuss it


Question 6 Explanation: 
A structure variable can be assigned to other using =, but cannot be compared with other using ==
Question 7
union test
{
    int x;
    char arr[8];
    int y;
};

int main()
{
    printf("%d", sizeof(union test));
    return 0;
}
Predict the output of above program. Assume that the size of an integer is 4 bytes and size of character is 1 byte. Also assume that there is no alignment needed.
A
12
B
16
C
8
D
Compiler Error
Structure & Union    
Discuss it


Question 7 Explanation: 
When we declare a union, memory allocated for a union variable of the type is equal to memory needed for the largest member of it, and all members share this same memory space. In above example, "char arr[8]" is the largest member. Therefore size of union test is 8 bytes.
Question 8
union test
{
    int x;
    char arr[4];
    int y;
};

int main()
{
    union test t;
    t.x = 0;
    t.arr[1] = 'G';
    printf("%s", t.arr);
    return 0;
}
Predict the output of above program. Assume that the size of an integer is 4 bytes and size of character is 1 byte. Also assume that there is no alignment needed.
A
Nothing is printed
B
G
C
Garbage character followed by 'G'
D
Garbage character followed by 'G', followed by more garbage characters
E
Compiler Error
Structure & Union    
Discuss it


Question 8 Explanation: 
Since x and arr[4] share the same memory, when we set x = 0, all characters of arr are set as 0. O is ASCII value of '\0'. When we do "t.arr[1] = 'G'", arr[] becomes "\0G\0\0". When we print a string using "%s", the printf function starts from the first character and keeps printing till it finds a \0. Since the first character itself is \0, nothing is printed.
Question 9
# include <iostream>
# include <string.h>
using namespace std;

struct Test
{
  char str[20];
};

int main()
{
  struct Test st1, st2;
  strcpy(st1.str, "GeeksQuiz");
  st2 = st1;
  st1.str[0] = 'S';
  cout << st2.str;
  return 0;
}
A
Segmentation Fault
B
SeeksQuiz
C
GeeksQuiz
D
Compiler Error
Structure & Union    
Discuss it


Question 9 Explanation: 
Array members are deeply copied when a struct variable is assigned to another one. See Are array members deeply copied? for more details.
Question 10
Predict the output of following C program
#include<stdio.h>
struct Point
{
  int x, y, z;
};

int main()
{
  struct Point p1 = {.y = 0, .z = 1, .x = 2};
  printf("%d %d %d", p1.x, p1.y, p1.z);
  return 0;
}
A
Compiler Error
B
2 0 1
C
0 1 2
D
2 1 0
Structure & Union    
Discuss it


Question 10 Explanation: 
Refer designated Initialization discussed here.
There are 19 questions to complete.
12

Company Wise Coding Practice    Topic Wise Coding Practice