Pointers as Structure Member in C
Last updated on July 27, 2020
We can also have a pointer as a member of the structure. For example:
1 2 3 4 5 6 7 | struct test
{
char name[20];
int *ptr_mem;
};
struct test t1, *str_ptr = &t1;
|
Here ptr_mem
is a pointer to int
and a member of structure test
.
There are two ways in which we can access the value (i.e address) of ptr_mem
:
- Using structure variable -
t1.ptr_mem
- Using pointer variable -
str_ptr->ptr_mem
Similarly, there are two ways in which we can access the value pointed to by ptr_mem
.
- Using structure variable -
*t1.ptr_mem
- Using pointer variable -
*str_ptr->ptr_mem
Since the precedence of dot(.
) operator is greater than that of indirection(*
) operator, so in the expression *t1.ptr_mem
the dot(.
) is applied before the indirection(*
) operator. Similarly in the expression *str_ptr->ptr_mem
, the arrow (->
) operator is applied followed by indirection(*
) operator.
The following program demonstrates everything we have learned so far in this lesson.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include<stdio.h>
struct student
{
char *name;
int age;
char *program;
char *subjects[5];
};
int main()
{
struct student stu = {
"Lucy",
25,
"CS",
{"CS-01", "CS-02", "CS-03", "CS-04", "CS-05" }
};
struct student *ptr_stu = &stu;
int i;
printf("Accessing members using structure variable: \n\n");
printf("Name: %s\n", stu.name);
printf("Age: %d\n", stu.age);
printf("Program enrolled: %s\n", stu.program);
for(i = 0; i < 5; i++)
{
printf("Subject : %s \n", stu.subjects[i]);
}
printf("\n\nAccessing members using pointer variable: \n\n");
printf("Name: %s\n", ptr_stu->name);
printf("Age: %d\n", ptr_stu->age);
printf("Program enrolled: %s\n", ptr_stu->program);
for(i = 0; i < 5; i++)
{
printf("Subject : %s \n", ptr_stu->subjects[i]);
}
// signal to operating system program ran fine
return 0;
}
|
Expected Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Accessing members using structure variable:
Name: Lucy
Age: 25
Program enrolled: CS
Subject : CS-01
Subject : CS-02
Subject : CS-03
Subject : CS-04
Subject : CS-05
Accessing members using pointer variable:
Name: Lucy
Age: 25
Program enrolled: CS
Subject : CS-01
Subject : CS-02
Subject : CS-03
Subject : CS-04
Subject : CS-05
|
How it works:
In lines 3-9, a structure student
is declared which have four members namely: name
, age
, program
and subjects
. The type of members is as follows:
Name | Type |
---|---|
name |
a pointer to char |
age |
int |
program |
a pointer to char |
subjects |
an array of 5 pointers to char |
In lines 13-18, a variable stu
of type struct student
is declared and initialized. Since name
and program
are pointers to char so we can directly assign string literals to them. Similarly, subjects
is an array of 5 pointers to char, so it can hold 5 string literals.
In line 20, a pointer variable ptr_stu
of type struct student
is declared and assigned the address of stu
using &
operator.
From lines 25-27, three printf()
statement is used to print name
, age
and program
using structure variable stu
.
In lines 29-32, a for loop is used to loop through all the elements of an array of pointers *subjects[5]
. And print the names of the subjects using structure variable.
From lines 36-38, three printf()
statement is used to print name
, age
and program
using pointer variable ptr_stu
.
In lines 40-43, a for loop is used to loop through all the elements of an array of pointers *subjects[5]
. And print the names of the subjects using pointer variable.
Load Comments