Table of Contents
In this lesson, you will learn how to access a struct by using a pointer variable, along with examples, to understand the topic better.
Accessing structs using pointers in C
In the lesson Struct Basics in C, we learned how to access a struct by using a normal struct variable. However, a struct can be accessed by a pointer, where a pointer variable points to the struct variable’s address.
Example
struct student { char name[20]; int age; char grade[1]; }; struct student student; // declare a pointer to the struct of type struct student struct student * studentPointer;
In the example above, we declared a pointer studentPointer
that stores the address of the struct student.
Accessing elements using pointers
Now let’s access the struct student members’ by using a pointer. In C, there are multiple ways to access a struct’s element using a pointer: The Asterisk *
and the dot .
operators, as well arrow ->
operator.
1- Using the asterisk (*) and Dot (.) Operator
The asterisk *
and Dot .
operators allow us to access a member of a struct in C.
(*studentPointer).name // Points to the name (*studentPointer).age // Points to the age
.
operator is greater than the asterisks *
Example
#include <stdio.h> #include <string.h> struct Student { char name[20]; int age; char grade[1]; }; int main(int argc, char * argv[]) { struct Student student1, student2; strcpy(student1.name, "Fred"); strcpy(student1.grade, "A"); student1.age = 21; strcpy(student2.name, "Steve"); strcpy(student2.grade, "B"); student2.age = 23; struct Student * studentPointer; // define struct pointer studentPointer = & student1; // points studentPointer to student1 printf("Values in Pointer &student1 \n"); printf(( * studentPointer).name); printf(" \n"); printf(( * studentPointer).grade); printf(" \n"); printf(" \n"); studentPointer = & student2; // points studentPointer to student2 printf("Values in Pointer &student2 \n"); printf(( * studentPointer).name); printf(" \n"); printf(( * studentPointer).grade); printf(" \n"); printf(" \n"); }
Output
Values in Pinter &student1
Fred
AValues in Pointer &student2
Steve
B
2- Using the arrow operator (->)
Another method, which is preferred due to its clearness and simplicity, is the arrow ->
operator’s use.
studentPointer->name // Points to the name studentPointer->age // Points to the age
In this method, the asterisks and dot operators are omitted, making the code clear and easier to understand.
Example
#include <stdio.h> #include <string.h> struct Student { char name[20]; int age; char grade[1]; }; int main(int argc, char * argv[]) { struct Student student1, student2; strcpy(student1.name, "Fred"); strcpy(student1.grade, "A"); student1.age = 21; strcpy(student2.name, "Steve"); strcpy(student2.grade, "B"); student2.age = 23; struct Student * studentPointer; // define struct pointer studentPointer = & student1; // points studentPointer to student1 printf("Values in Pinter &student1 \n"); printf(studentPointer -> name); printf(" \n"); printf(studentPointer -> grade); printf(" \n"); printf(" \n"); studentPointer = & student2; // points studentPointer to student2 printf("Values in Pointer &student2 \n"); printf(studentPointer -> name); printf(" \n"); printf(studentPointer -> grade); printf(" \n"); printf(" \n"); }
Output
Values in Pinter &student1
Fred
A
Values in Pointer &student2
Steve
B
Points to remember
- In addition to a normal struct variable, a struct in C can be accessed by pointers as well.
- In C, The Asterisk
*
and Dot.
can access structs. - The arrow
->
operator is a cleaner way to access a struct in C.