Pointer To Structure In C Language

7 min read

Pointer to Structure in C Language

Introduction

In the world of C programming, structures (or structs) allow developers to group related variables into a single unit, making data organization more logical and manageable. That's why when combined with pointers, these grouped variables become even more powerful, enabling efficient memory handling, dynamic data structures, and cleaner code. This article explains pointer to structure in C language, covering the basic concepts, step‑by‑step usage, underlying memory model, and practical examples. By the end, readers will be able to declare structures, create pointers to them, and access members through those pointers with confidence Practical, not theoretical..

Understanding Structures in C

A structure is a user‑defined data type that aggregates multiple variables, which can be of different types. The keyword struct introduces a structure definition, and each variable declared from that definition is called a structure variable.

struct Person {
    char name[50];
    int  age;
    float salary;
};

In the example above, Person is a structure type containing three members: a character array for the name, an integer for age, and a floating‑point number for salary. Once defined, you can declare variables like struct Person p1; or use the typedef keyword to give the structure a shorter name:

typedef struct {
    char name[50];
    int  age;
    float salary;
} Person;

Now you can write Person p1; without the struct prefix. Pointers are variables that store memory addresses, and when they point to a structure, they allow indirect access to its members, which is especially useful when passing structures to functions or working with dynamically allocated memory The details matter here..

Understanding Pointers in C

A pointer is a variable that holds the memory address of another variable. Its declaration includes the data type of the address it points to, followed by an asterisk (*). For example:

int *p;   // p is a pointer to an int

Pointers enable programmers to manipulate data in place, pass arguments by reference, and dynamically allocate memory. When a pointer is assigned the address of a structure, it becomes a pointer to structure, allowing the program to traverse, modify, or create multiple instances of the structure efficiently.

Pointer to Structure: Core Concept

Declaring a Structure

First, define the structure type. This can be done inline or with typedef for convenience.

struct Student {
    char  name[30];
    int   id;
    float gpa;
};

Creating a Pointer to Structure

Declare a pointer that matches the structure type, then assign it the address of a structure variable using the address operator (&).

struct Student s1 = {"Alice", 20, 3.75};
struct Student *pStudent = &s1;   // pStudent points to s1

Accessing Structure Members via Pointer

Use the dereference operator (*) combined with the dot operator (.) or the arrow operator (->) to reach members through the pointer.

printf("Name: %s\n", pStudent->name);   // arrow operator
printf("Age: %d\n", (*pStudent).age);  // dereference then dot

Both statements retrieve the name and age fields, respectively. The arrow operator is preferred for readability.

Step‑by‑Step Guide to Using Pointer to Structure

  1. Define the structure – decide which fields are needed.
  2. Declare a variable of that structure (or use typedef).
  3. Allocate memory – either on the stack (automatic) or on the heap (dynamic).
  4. Create a pointer to the structure variable.
  5. Assign the address of the structure to the pointer (&variable).
  6. Access members using -> or (*pointer)..
  7. Pass the pointer to functions to modify the original structure.
  8. Free dynamic memory (if allocated with malloc/calloc) to avoid leaks.

Example Code

#include 
#include 

typedef struct {
    char name[20];
    int  score;
} ScoreRecord;

void display(ScoreRecord *rec) {
    printf("Name: %s, Score: %d\n", rec->name, rec->score);
}

int main(void) {
    ScoreRecord rec = {"Bob", 85};

    // Step 1‑3: variable already exists on the stack
    ScoreRecord *ptr = &rec;          // Step 4‑5: create pointer and assign address

    // Step 6: access members
    printf("Original score: %d\n", ptr->score);

    // Modify through the pointer
    ptr->score = 90;
    printf("Updated score: %d\n", ptr->score);

    // Pass pointer to function
    display(ptr);

    return 0;
}

Explanation of the example

  • The ScoreRecord structure holds a name and a score.
  • rec is a stack‑allocated variable.
  • ptr is a pointer that stores the address of rec.
  • ptr->score reads and writes the score field directly, demonstrating how the original variable is modified without copying.
  • The display function receives a pointer, allowing it to print the data without needing to return the structure.

Common Scenarios and Benefits

  • Dynamic Arrays of Structures – Allocate an array of structures on the heap, then use a pointer to manage elements efficiently.
  • Linked Lists – Each node can be a structure containing a data field and a pointer to the next node, forming the basis of many data structures.
  • Function Parameters – Passing a pointer to a structure avoids copying large data, improving performance.
  • Interoperability with APIs – Many C libraries expect pointers to structures; understanding this pattern is essential for using those APIs.

Key benefits include:

  • Memory efficiency – Only the address (typically 4 or 8 bytes) is passed instead of the entire structure.
  • Modularity – Functions can work on any structure of the same type without needing separate implementations.
  • Readability – Arrow (->) notation clearly shows that a member is accessed via a pointer.

Scientific Explanation

When a variable of a structure is declared, the compiler reserves a contiguous block of memory large enough to hold all its members. The address of that block is the value that a pointer can store. As an example, if struct Student occupies 44 bytes, then &s1 contains the starting address of those 44 bytes.

A pointer to structure stores this address, and the dereferencing operation (*) tells the CPU to fetch the address stored in the pointer, then read or write the memory location it points to. And the arrow operator (->) is syntactic sugar that combines dereferencing and member access: ptr->member is equivalent to (*ptr). member.

Understanding this memory model helps explain why modifying a structure through a pointer affects the original variable directly, and why passing a pointer to a function can change the caller’s data (call‑by‑reference semantics). Also worth noting, because the pointer holds only the address, the size of the pointer is independent of the structure’s size, which is why pointers are ideal for large structures or for building complex data structures like trees and graphs.

Frequently Asked Questions

Q1: Can a pointer be null?
A: Yes. A null pointer (NULL) does not point to any valid memory. Always check for NULL before dereferencing to avoid segmentation faults.

Q2: Do I need to use typedef for structure pointers?
A: Not required, but typedef simplifies declarations. To give you an idea, typedef struct Student StudentPtr; lets you write StudentPtr p; instead of struct Student *p;.

Q3: What happens if I free a structure that a pointer still references?
A: Accessing the freed memory leads to undefined behavior. After free(ptr), set the pointer to NULL to prevent accidental use Not complicated — just consistent..

Q4: Can I pass a pointer to a structure to a scanf function?
A: Yes, but you must pass the address of the member you want to read, e.g., scanf("%s", &rec.name); or use scanf("%s", (*ptr).name); That's the part that actually makes a difference..

Q5: Is it possible to have a pointer to a pointer to a structure?
A: Absolutely. This is useful for dynamic allocation of arrays of structures (struct Student **pp = malloc(sizeof(struct Student) * n);). The extra level of indirection allows flexible memory management But it adds up..

Conclusion

Pointers to structures are a cornerstone of efficient C programming. In real terms, by mastering the declaration, initialization, and dereferencing of such pointers, developers can manipulate grouped data with minimal overhead, build dynamic data structures, and write cleaner, more maintainable code. Consider this: understanding the underlying memory model reinforces why these techniques work and helps avoid common pitfalls like null‑pointer dereferencing or memory leaks. The key steps—defining the structure, creating a pointer, assigning its address, and accessing members via ->—form a simple yet powerful pattern that recurs throughout C projects. With practice, pointer to structure becomes an intuitive tool that enhances both performance and readability, making it an essential skill for any C programmer.

Short version: it depends. Long version — keep reading.

New and Fresh

Just Came Out

Picked for You

Others Also Checked Out

Thank you for reading about Pointer To Structure In C Language. We hope the information has been useful. Feel free to contact us if you have any questions. See you next time — don't forget to bookmark!
⌂ Back to Home