Structures in C

22 Jun, 2022
What is a structure? A structure is a key word that create user defined data type in C/C++. A structure creates a data type that can be used to group items of possibly different types into a single type.  
  How to create a structure? ‘struct’ keyword is used to create a structure. Following is an example.  
C
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.  
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
C
// 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 typesstruct Point{   int x, y;}; int main(){   struct Point p1;  // The variable p1 is declared like a normal variable}
Note: In C++, the struct keyword is optional before in declaration of a variable. In C, it is mandatory. 
How to initialize structure members? Structure members cannot be initialized with declaration. For example the following C program fails in compilation.  
C
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.  
C
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.  
C
#include<stdio.h> struct Point{   int x, y;}; int main(){   struct Point p1 = {0, 1};    // Accessing members of point p1   p1.x = 20;   printf ("x = %d, y = %d", p1.x, p1.y);    return 0;}
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.  
C
#include<stdio.h> struct Point{   int x, y, z;}; int main(){   // Examples of initialization 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;}
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.  
C
#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;}
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. 
C
#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;}
1 2
 
What is structure member alignment? See https://www.geeksforgeeks.org/structure-member-alignment-padding-and-data-packing/Limitations of C StructuresIn 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: 
C
struct number{    float x;};int main(){    struct number n1,n2,n3;    n1.x=4;    n2.x=3;    n3=n1+n2;    return 0;} /*Output: prog.c: In function 'main':prog.c:10:7: error:invalid operands to binary + (have 'struct number' and 'struct number')  n3=n1+n2; */
 
But we can use arithmetic operation on structure variables like this.
C
// Use of airthmatic operator in sturcture #include <stdio.h> struct number {    float x;};int main(){    struct number n1,n2,n3;    n1.x=4;    n2.x=3;    n3.x=(n1.x)+(n2.x);    printf("\n%f",n3.x);    return 0;}
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.
Related Article : C Structures vs C++ Structures 
 
RajeetGoyal
mxp
RishabhPrabhu
SidharthSunil
shubham_singh
vishalyadav3
shikharg1110
C Basics
C-Struct-Union-Enum
CBSE - Class 11
cpp-structure
school-programming
C Language
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Substring in C++
Multidimensional Arrays in C / C++
Left Shift and Right Shift Operators in C/C++
Unordered Sets in C++ Standard Template Library
What is the purpose of a function prototype?
std::string class in C++
Function Pointer in C
rand() and srand() in C/C++
Different Methods to Reverse a String in C++
Enumeration (or enum) in C