Bird
Raised Fist0
Cprogramming~5 mins

Address and dereference operators

Choose your learning style10 modes available
Introduction

We use address and dereference operators to work with memory locations directly. This helps us access or change the value stored in a specific place in the computer's memory.

When you want to find the memory address of a variable.
When you want to access or change the value stored at a specific memory address.
When working with pointers to handle dynamic data or arrays.
When passing large data to functions efficiently by passing addresses instead of copies.
Syntax
C
int *pointer;  // declare a pointer to int
pointer = &variable;  // & is the address operator
value = *pointer;  // * is the dereference operator

The & operator gives the address of a variable.

The * operator accesses the value stored at the address the pointer holds.

Examples
Here, p stores the address of x. Using *p gets the value of x.
C
int x = 10;
int *p = &x;  // p holds the address of x
int y = *p;   // y gets the value 10 from x
Using *ptr = 20; changes the value stored at the address ptr points to, which is a.
C
int a = 5;
int *ptr = &a;
*ptr = 20;  // changes value of a to 20
Sample Program

This program shows how to get the address of a variable using &, access its value using *, and change the value through the pointer.

C
#include <stdio.h>

int main() {
    int num = 7;
    int *p = &num;  // p stores address of num

    printf("Value of num: %d\n", num);
    printf("Address of num: %p\n", (void*)&num);
    printf("Value stored at pointer p: %d\n", *p);

    *p = 15;  // change value of num using pointer
    printf("New value of num after change: %d\n", num);

    return 0;
}
OutputSuccess
Important Notes

Always initialize pointers before dereferencing to avoid errors.

Use (void*) cast when printing addresses with %p for portability.

Summary

The & operator gets the address of a variable.

The * operator accesses or changes the value at a given address.

Pointers store addresses and allow indirect access to variables.

Practice

(1/5)
1. What does the & operator do in C?
easy
A. It gives the memory address of a variable.
B. It multiplies two numbers.
C. It dereferences a pointer to get the value.
D. It declares a pointer variable.

Solution

  1. Step 1: Understand the & operator

    The & operator is used to get the address of a variable in memory.
  2. Step 2: Differentiate from other operators

    It does not multiply, dereference, or declare pointers; those are different operations.
  3. Final Answer:

    It gives the memory address of a variable. -> Option A
  4. Quick Check:

    & means address-of [OK]
Hint: Remember & means 'address of' variable [OK]
Common Mistakes:
  • Confusing & with multiplication operator
  • Thinking & dereferences a pointer
  • Mixing & with pointer declaration
2. Which of the following is the correct way to declare a pointer to an integer in C?
easy
A. *int ptr;
B. int &ptr;
C. int ptr*;
D. int *ptr;

Solution

  1. Step 1: Recall pointer declaration syntax

    In C, a pointer to an int is declared as int *ptr; where * indicates pointer type.
  2. Step 2: Check other options for syntax errors

    int &ptr; is invalid in C (it's C++ reference), int ptr*; and *int ptr; are incorrect syntax.
  3. Final Answer:

    int *ptr; -> Option D
  4. Quick Check:

    Pointer declaration uses * before variable name [OK]
Hint: Pointer declaration: type *name; [OK]
Common Mistakes:
  • Using & instead of * for pointers
  • Placing * after variable name incorrectly
  • Confusing C++ references with pointers
3. What is the output of this code?
int x = 10;
int *p = &x;
printf("%d", *p);
medium
A. 10
B. The memory address of x
C. Garbage value
D. Compilation error

Solution

  1. Step 1: Understand pointer assignment

    Pointer p stores the address of x using &x.
  2. Step 2: Dereference pointer to get value

    *p accesses the value at the address stored in p, which is 10.
  3. Final Answer:

    10 -> Option A
  4. Quick Check:

    *p gives value at address [OK]
Hint: *p gives value stored at pointer address [OK]
Common Mistakes:
  • Printing pointer variable instead of dereferenced value
  • Confusing & and * operators
  • Expecting address instead of value
4. Identify the error in this code snippet:
int x = 5;
int *p;
*p = x;
printf("%d", *p);
medium
A. Incorrect use of & operator.
B. Pointer p is not initialized before dereferencing.
C. Variable x is not declared.
D. Missing semicolon after declaration.

Solution

  1. Step 1: Check pointer initialization

    Pointer p is declared but not assigned an address before *p = x;.
  2. Step 2: Understand dereferencing uninitialized pointer

    Dereferencing p without initialization causes undefined behavior or crash.
  3. Final Answer:

    Pointer p is not initialized before dereferencing. -> Option B
  4. Quick Check:

    Always assign pointer before dereferencing [OK]
Hint: Initialize pointer before using * to access value [OK]
Common Mistakes:
  • Dereferencing uninitialized pointer
  • Confusing assignment with address-of
  • Ignoring pointer initialization warnings
5. Given the code below, what will be the output?
int a = 3, b = 7;
int *p = &a;
*p = *p + 4;
p = &b;
*p = *p - 2;
printf("%d %d", a, b);
hard
A. 7 3
B. 3 5
C. 7 5
D. 7 7

Solution

  1. Step 1: Modify value pointed by p initially

    p points to a. *p = *p + 4; changes a from 3 to 7.
  2. Step 2: Change pointer to point to b and modify

    p = &b; points to b. *p = *p - 2; changes b from 7 to 5.
  3. Step 3: Print final values

    a is 7 and b is 5.
  4. Final Answer:

    7 5 -> Option C
  5. Quick Check:

    Pointer changes values via dereference [OK]
Hint: Track pointer target and value changes stepwise [OK]
Common Mistakes:
  • Not updating the correct variable via pointer
  • Confusing pointer assignment with value assignment
  • Ignoring pointer reassignment effects
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard