What is a structure?
A structure is a 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.
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
} |
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.
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};
// 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.
#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.
#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.
#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/amp/
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.
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;
*/ |
Related Article : C Structures vs C++ Structures
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.