Structure in C


  1. Structure is a way to group  variables
  2. Structure is a collection of dissimilar elements.
  3. defining structure means creating new data type.
Structure is a user-defined datatype in C language which allows us to combine data of different types together. Structure helps to construct a complex data type which is more meaningful. ... In structure, data is stored in form of records.
How to create a structure?
‘struct’ keyword is used to create a structure. Following is an example.
struct address
{
   char name[50];
   char street[100];
   char city[50];
   char state[20];
   int pin;
};
How to declare structure variables?
A structure variable can either be declared with structure declaration or as a separate declaration like basic types.
// A variable declaration with structure declaration.
struct Point
{
   int x, y;
} p1;  // The variable p1 is declared with 'Point'
  
  
// A variable declaration like basic data types
struct Point
{
   int x, y;
}; 
  
int main()
{
   struct Point p1;  // The variable p1 is declared like a normal variable
}
How to initialize structure members?
Structure members cannot be initialized with declaration. For example the following C program fails in compilation.
struct Point
{
   int x = 0;  // COMPILER ERROR:  cannot initialize members here
   int y = 0;  // COMPILER ERROR:  cannot initialize members here
}; 
The reason for above error is simple, when a datatype is declared, no memory is allocated for it. Memory is allocated only when variables are created.
Structure members can be initialized using curly braces ‘{}’. For example, following is a valid initialization.
struct Point
{
   int x, y;
}; 
  
int main()
{
   // A valid initialization. member x gets value 0 and y
   // gets value 1.  The order of declaration is followed.
   struct Point p1 = {0, 1}; 
}

How to access structure elements?
Structure members are accessed using dot (.) operator.
#include<stdio.h>
  
struct Point
{
   int x, y;
};
  
int main()
{
   struct Point p1 = {0, 1};
  
   // Accesing members of point p1
   p1.x = 20;
   printf ("x = %d, y = %d", p1.x, p1.y);
  
   return 0;
}
Output:
x = 20, y = 1

What is designated Initialization?
Designated Initialization allows structure members to be initialized in any order. This feature has been added in C99 standard.
#include<stdio.h>
  
struct Point
{
   int x, y, z;
};
  
int main()
{
   // Examples of initializtion using designated initialization
   struct Point p1 = {.y = 0, .z = 1, .x = 2};
   struct Point p2 = {.x = 20};
  
   printf ("x = %d, y = %d, z = %d\n", p1.x, p1.y, p1.z);
   printf ("x = %d", p2.x);
   return 0;
}
Output:
x = 2, y = 0, z = 1
x = 20
This feature is not available in C++ and works only in C.

What is an array of structures?
Like other primitive data types, we can create an array of structures.
#include<stdio.h>
  
struct Point
{
   int x, y;
};
  
int main()
{
   // Create an array of structures
   struct Point arr[10];
  
   // Access array members
   arr[0].x = 10;
   arr[0].y = 20;
  
   printf("%d %d", arr[0].x, arr[0].y);
   return 0;
}
Output:
10 20

What is a structure pointer?
Like primitive types, we can have pointer to a structure. If we have a pointer to structure, members are accessed using arrow ( -> ) operator.
#include<stdio.h>
  
struct Point
{
   int x, y;
};
  
int main()
{
   struct Point p1 = {1, 2};
  
   // p2 is a pointer to structure p1
   struct Point *p2 = &p1;
  
   // Accessing structure members using structure pointer
   printf("%d %d", p2->x, p2->y);
   return 0;
}
Output:
1 2
Limitations of C Structures
In C language, Structures provide a method for packing together data of different types. A Structure is a helpful tool to handle a group of logically related data items. However, C structures have some limitations.
  • The C structure does not allow the struct data type to be treated like built-in data types:
  • We cannot use operators like +,- etc. on Structure variables. For example, consider the following code:
    (have 'struct number' and 'struct number')
      n3=n1+n2;
      
    */
  • No Data Hiding: C Structures do not permit data hiding. Structure members can be accessed by any function, anywhere in the scope of the Structure.
  • Functions inside Structure: C structures do not permit functions inside Structure
  • Static Members: C Structures cannot have static members inside their body
  • Access Modifiers: C Programming language do not support access modifiers. So they cannot be used in C Structures.
  • Construction creation in Structure: Structures in C cannot have constructor inside Structures.

  • No comments:

    Post a Comment

    Featured Post

    Core and Advance Python

                          Language Fundamentals