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 xint 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 = # // 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);
return0;
}
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
Step 1: Understand the & operator
The & operator is used to get the address of a variable in memory.
Step 2: Differentiate from other operators
It does not multiply, dereference, or declare pointers; those are different operations.
Final Answer:
It gives the memory address of a variable. -> Option A
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
Step 1: Recall pointer declaration syntax
In C, a pointer to an int is declared as int *ptr; where * indicates pointer type.
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.
Final Answer:
int *ptr; -> Option D
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
Step 1: Understand pointer assignment
Pointer p stores the address of x using &x.
Step 2: Dereference pointer to get value
*p accesses the value at the address stored in p, which is 10.
Final Answer:
10 -> Option A
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
Step 1: Check pointer initialization
Pointer p is declared but not assigned an address before *p = x;.