5.1) Pointers and addresses in C

Pointers and addresses are fundamental concepts in C that allow you to work with memory and variables.

1. Addresses in C

Every variable in C is stored in memory at a specific location known as its memory address.

You can think of this address as a unique identifier for the variable’s location in memory.

Getting the Address of a Variable

#include <stdio.h>

int main() {
    int num = 42;

    printf("Address of num: %p\n", &num);

    return 0;
}

Explanation:

  • In this example, the & operator is used to get the memory address of the variable num.
  • The %p format specifier is used in printf to print the memory address in hexadecimal format.

2. Pointers in C

A pointer is a variable that stores the memory address of another variable.

Pointers allow you to indirectly access and manipulate variables using their memory addresses.

Declaring and Using Pointers

#include <stdio.h>

int main() {
    int num = 42;
    int *ptr; // Declare a pointer to an integer

    ptr = &num; // Assign the address of num to the pointer

    printf("Value of num: %d\n", num);
    printf("Value of num using pointer: %d\n", *ptr);

    return 0;
}

Explanation:

  • In this example, a pointer ptr to an integer is declared using the int * syntax.
  • The address of the variable num is assigned to the pointer using ptr = &num.
  • To access the value stored in the memory location pointed to by ptr, we use the * operator (dereferencing).

3. Using Pointers to Modify Variables

Pointers allow you to indirectly modify variables by changing their values through their memory addresses.

Example: Modifying a Variable Using a Pointer

#include <stdio.h>

int main() {
    int num = 42;
    int *ptr;

    ptr = &num;

    *ptr = 99; // Modifying the value of num indirectly through ptr

    printf("Modified value of num: %d\n", num);

    return 0;
}

Explanation:

  • In this example, the pointer ptr is used to modify the value of the variable num indirectly by dereferencing it with *ptr = 99.

4. Pointers and Function Parameters:

Pointers are often used to pass variables by reference to functions, allowing functions to modify the original variable.

Example: Passing Variables by Reference Using Pointers

#include <stdio.h>

void modifyValue(int *x) {
    *x = *x * 2;
}

int main() {
    int num = 5;

    printf("Original value of num: %d\n", num);

    modifyValue(&num); // Passing num by reference

    printf("Modified value of num: %d\n", num);

    return 0;
}

Explanation:

  • The function modifyValue takes a pointer to an integer as a parameter.
  • Inside the function, the value of the parameter (pointed to by the pointer) is modified by doubling it.
  • The & operator is used to pass the memory address of num to the function.

Important Considerations:

  1. Pointer Initialization: Initialize pointers before using them to point to valid memory locations. Uninitialized pointers can lead to unpredictable behavior.
  2. Dereferencing: When using pointers to access or modify variables, don’t forget to dereference the pointer using the * operator.
  3. NULL Pointers: Pointers can be assigned the value NULL to indicate they are not pointing to any valid memory location.
  4. Memory Safety: Be cautious with pointer arithmetic to avoid accessing memory that doesn’t belong to your program.

Pointers and memory addresses allow you to work with data more flexibly and efficiently in C. They are essential for tasks like passing variables to functions, dynamic memory allocation, and efficient data manipulation.

Leave a Reply