C Structure & Union

Last Updated : 28 Sep, 2023

Question 1

Choose the correct output from the options given below:

C

#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;
}
Cross

200 GeeksQuiz

Cross

200

Cross

Runtime Error

Tick

Compiler Error



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;
}
Cross
4
Cross
8
Tick
Compiler Error
Cross
Runtime Error


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

C

struct node 
{ 
   int i; 
   float j; 
}; 
struct node *s[10];

The above C declaration define 's' to be (GATE CS 2000)

Tick

An array, each element of which is a pointer to a structure of type node

Cross

A structure of 2 fields, each field being a pointer to an array of 10 elements

Cross

A structure of 3 fields: an integer, a float, and an array of 10 elements

Cross

An array, each element of which is a structure of type node.



Question 3-Explanation: 

It defines an array, each element of which is a pointer to a structure of type node.

Question 4

Consider the following C declaration 
 

C

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)
 

Cross

22 bytes
 

Cross

14 bytes
 

Tick

18 bytes
 

Cross

10 bytes
 



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

Choose the correct output from the options given below:

C

#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; 
}
Tick

Compiler Error

Cross

10

Cross

Runtime Error

Cross

Garbage Value



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?
 

Cross

Equality comparison ( == )
 

Cross

Assignment ( = )
 

Tick

Both of the above
 

Cross

None of the above
 



Question 6-Explanation: 

Both of the above: In C, both equality comparison (==) and assignment (=) operators can be applied to structure variables, allowing for comparison and assignment of values between structures when their members support it. 

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.
Cross
12
Cross
16
Tick
8
Cross
Compiler Error


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.
Tick
Nothing is printed
Cross
G
Cross
Garbage character followed by \'G\'
Cross
Garbage character followed by \'G\', followed by more garbage characters
Cross
Compiler Error


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;
}
Cross
Segmentation Fault
Cross
SeeksQuiz
Tick
GeeksQuiz
Cross
Compiler Error


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;
}
Cross
Compiler Error
Tick
2 0 1
Cross
0 1 2
Cross
2 1 0


Question 10-Explanation: 
Refer designated Initialization discussed here.
There are 22 questions to complete.


Share your thoughts in the comments

Similar Reads