Bird
Raised Fist0
Cprogramming~3 mins

Why Address and dereference operators? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if you could change data anywhere just by knowing where it lives in memory?

The Scenario

Imagine you have a list of friends' phone numbers written on paper. To call a friend, you have to look up their number every time manually. If you want to change a number, you must rewrite it everywhere it appears. This is like handling data without pointers in C.

The Problem

Manually copying or passing data everywhere is slow and error-prone. If you want to update a value, you must find and change every copy. This wastes time and can cause mistakes, especially with large data or complex programs.

The Solution

Address and dereference operators let you work with the location of data instead of copies. You can pass around the address (pointer) and change the original data directly. This saves time, memory, and reduces errors.

Before vs After
✗ Before
int x = 10;
int y = x; // copy value
// changing y does not affect x
✓ After
int x = 10;
int *p = &x; // store address
*p = 20; // change original x through pointer
What It Enables

It enables efficient data sharing and modification by using memory addresses directly.

Real Life Example

Think of a remote control (pointer) that lets you change the TV (data) without moving the TV itself.

Key Takeaways

Manual data copying is slow and error-prone.

Address operator (&) gets the location of data.

Dereference operator (*) accesses or changes data at that location.

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