Unit 5
Unit 5
C struct
In this tutorial, you'll learn about struct types in C Programming with the help of examples.
In C programming, a struct (or structure) is a collection of variables (can be of different
types) under a single name.
Define Structures
Before you can create structure variables, you need to define its data type. To define a
struct, the struct keyword is used.
Syntax of struct
struct structureName {
dataType member1;
dataType member2;
...
};
For example,
struct Person {
char name[50];
int citNo;
float salary;
};
Here, a derived type struct Person is defined. Now, you can create variables of this type.
struct Person {
// code
};
int main() {
struct Person person1, person2, p[20];
return 0;
}
struct Person {
// code
} person1, person2, p[20];
In both cases,
person1 and person2 are struct Person variables
person2.salary
int main() {
return 0;
}
Run Code
Output
In this program, we have created a struct named Person. We have also created a variable
of Person named person1.
In main(), we have assigned values to the variables defined in Person for
the person1 object.
Notice that we have used strcpy() function to assign the value to person1.name.
This is because name is a char array (C-string) and we cannot use the assignment
operator = with it after we have declared the string.
Finally, we printed the data of person1.
Keyword typedef
We use the typedef keyword to create an alias name for data types. It is commonly used
with structures to simplify the syntax of declaring variables.
For example, let us look at the following code:
struct Distance{
int feet;
float inch;
};
int main() {
struct Distance d1, d2;
}
int main() {
distances d1, d2;
}
int main() {
return 0;
}
Run Code
Output
Here, we have used typedef with the Person structure to create an alias person.
Now, we can simply declare a Person variable using the person alias:
Nested Structures
You can create structures within a structure in C programming. For example,
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integers;
} num1, num2;
Suppose, you want to set imag of num2 variable to 11. Here's how you can do it:
num2.comp.imag = 11;
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integer;
} num1;
int main() {
return 0;
}
Run Code
Output
Imaginary Part: 11
Real Part: 5.25
Integer: 6
Why structs in C?
Suppose, you want to store information about a person: his/her name, citizenship number,
and salary. You can create different variables name, citNo and salary to store this
information.
What if you need to store information of more than one person? Now, you need to create
different variables for each information per
person: name1, citNo1, salary1, name2, citNo2, salary2, etc.
A better approach would be to have a collection of all related information under a single
name Person structure and use it for every person.
C Pointers to struct
Here's how you can create pointers to structs.
struct name {
member1;
member2;
.
.
};
int main()
{
struct name *ptr, Harry;
}
int main()
{
struct person *personPtr, person1;
personPtr = &person1;
printf("Displaying:\n");
printf("Age: %d\n", personPtr->age);
printf("weight: %f", personPtr->weight);
return 0;
}
In this example, the address of person1 is stored in the personPtr pointer using personPtr
= &person1;.
Now, you can access the members of person1 using the personPtr pointer.
By the way,
personPtr->age is equivalent to (*personPtr).age
personPtr->weight is equivalent to (*personPtr).weight
int main()
{
struct person *ptr;
int i, n;
printf("Displaying Information:\n");
for(i = 0; i < n; ++i)
printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age);
return 0;
}
When you run the program, the output will be:
In the above example, n number of struct variables are created where n is entered by the
user.
To allocate the memory for n number of struct person, we used,
// function prototype
void display(struct student s);
int main() {
struct student s1;
return 0;
}
Displaying information
Name: Bond
Age: 13
Here, a struct variable s1 of type struct student is created. The variable is passed to
the display() function using display(s1); statement.
// function prototype
struct student getInformation();
int main()
{
struct student s;
s = getInformation();
printf("\nDisplaying information\n");
printf("Name: %s", s.name);
printf("\nRoll: %d", s.age);
return 0;
}
struct student getInformation()
{
struct student s1;
printf("Enter name: ");
scanf ("%[^\n]%*c", s1.name);
return s1;
}
Run Code
Here, the getInformation() function is called using s = getInformation(); statement. The
function returns a structure of type struct student. The returned structure is displayed
from the main() function.
Notice that, the return type of getInformation() is also struct student.
int main()
{
complex c1, c2, result;
return 0;
}
void addNumbers(complex c1, complex c2, complex *result)
{
result->real = c1.real + c2.real;
result->imag = c1.imag + c2.imag;
}
Run Code
Output
result.real = 4.5
result.imag = -5.6
In the above program, three structure variables c1, c2 and the address of result is passed
to the addNumbers() function. Here, result is passed by reference.
When the result variable inside the addNumbers() is altered, the result variable inside
the main() function is also altered accordingly.
C Unions
In this tutorial, you'll learn about unions in C programming. More specifically, how to
create unions, access its members and learn the differences between unions and structures.
A union is a user-defined type similar to structs in C except for one key difference.
Structures allocate enough space to store all their members, whereas unions can only
hold one member value at a time.
union car
{
char name[50];
int price;
};
union car
{
char name[50];
int price;
};
int main()
{
union car car1, car2, *car3;
return 0;
}
union car
{
char name[50];
int price;
} car1, car2, *car3;
In both cases, union variables car1, car2, and a union pointer car3 of union car type are
created.
#include <stdio.h>
union unionJob
{
//defining a union
char name[32];
float salary;
int workerNo;
} uJob;
struct structJob
{
char name[32];
float salary;
int workerNo;
} sJob;
int main()
{
printf("size of union = %d bytes", sizeof(uJob));
printf("\nsize of structure = %d bytes", sizeof(sJob));
return 0;
}
Output
size of union = 32
size of structure = 40
#include <stdio.h>
union Job {
float salary;
int workerNo;
} j;
int main() {
j.salary = 12.3;
Output
Salary = 0.0
Number of workers = 100
1 Program
#include <stdio.h>
struct student {
char name[50];
int roll;
float marks;
} s;
int main() {
printf("Enter information:\n");
printf("Enter name: ");
fgets(s.name, sizeof(s.name), stdin);
printf("Displaying Information:\n");
printf("Name: ");
printf("%s", s.name);
printf("Roll number: %d\n", s.roll);
printf("Marks: %.1f\n", s.marks);
return 0;
}
Run Code
Output
Enter information:
Enter name: Jack
Enter roll number: 23
Enter marks: 34.5
Displaying Information:
Name: Jack
Roll number: 23
Marks: 34.5
2 Program
#include <stdio.h>
typedef struct complex {
float real;
float imag;
} complex;
int main() {
complex n1, n2, result;
Output
For 1st complex number
Enter the real and imaginary parts: 2.1
-2.3
3 Program
#include <stdio.h>
struct student {
char firstName[50];
int roll;
float marks;
} s[5];
int main() {
int i;
printf("Enter information of students:\n");
// storing information
for (i = 0; i < 5; ++i) {
s[i].roll = i + 1;
printf("\nFor roll number%d,\n", s[i].roll);
printf("Enter first name: ");
scanf("%s", s[i].firstName);
printf("Enter marks: ");
scanf("%f", &s[i].marks);
}
printf("Displaying Information:\n\n");
// displaying information
for (i = 0; i < 5; ++i) {
printf("\nRoll number: %d\n", i + 1);
printf("First name: ");
puts(s[i].firstName);
printf("Marks: %.1f", s[i].marks);
printf("\n");
}
return 0;
}
Run Code
Output
Roll number: 1
Name: Tom
Marks: 98
.
.
.