# Prerequisite to learn before pointer

### **Prerequisite Topics and Concepts to Learn Pointers in C**

Before diving into pointers, it is essential to have a solid understanding of the following concepts:

---

## **1\. Variables and Memory**

### **Key Points**:

* A variable is a named location in memory used to store data.
    
* Variables have:
    
    * **Name**: Identifier used in the program.
        
    * **Type**: Specifies the kind of data stored (e.g., `int`, `float`).
        
    * **Value**: The actual data stored in the memory.
        
    * **Address**: The location of the variable in memory (retrieved using `&` in C).
        

#### **Example**:

```c
#include <stdio.h>

int main() {
    int x = 10;  // Declare an integer variable
    printf("Value: %d\n", x);      // Prints the value of x
    printf("Address: %p\n", &x);   // Prints the memory address of x
    return 0;
}
```

---

## **2\. Data Types in C**

### **Key Points**:

* Understand different data types and their sizes in memory.
    
* Common data types:
    
    * **int**: Integer values.
        
    * **float**: Floating-point values.
        
    * **char**: Single characters.
        
    * **double**: Double-precision floating-point values.
        

#### **Example**:

```c
#include <stdio.h>

int main() {
    int a = 5;
    float b = 3.14;
    char c = 'A';
    printf("Size of int: %zu bytes\n", sizeof(a));
    printf("Size of float: %zu bytes\n", sizeof(b));
    printf("Size of char: %zu bytes\n", sizeof(c));
    return 0;
}
```

---

## **3\. Memory Layout of a Program**

### **Key Points**:

* Learn about the four memory regions:
    
    1. **Code Segment**: Stores the compiled code of the program.
        
    2. **Stack**: Stores local variables and function call data.
        
    3. **Heap**: Stores dynamically allocated memory.
        
    4. **Global/Static Segment**: Stores global and static variables.
        

---

## **4\. Arrays**

### **Key Points**:

* Arrays are a collection of elements stored in contiguous memory locations.
    
* Each element can be accessed using its index.
    
* The name of the array represents the base address of the array.
    

#### **Example**:

```c
#include <stdio.h>

int main() {
    int arr[3] = {10, 20, 30};
    printf("First element: %d\n", arr[0]);
    printf("Base address of array: %p\n", arr);
    return 0;
}
```

---

## **5\. Functions**

### **Key Points**:

* Functions allow modular programming by dividing code into reusable blocks.
    
* Understand **pass by value** (copying value to the function) and **pass by reference** (modifying the original variable using pointers).
    

#### **Example (Pass by Value)**:

```c
void changeValue(int x) {
    x = 20;  // Modifies local copy, not the original variable
}

int main() {
    int a = 10;
    changeValue(a);
    printf("Value of a: %d\n", a);  // Prints 10
    return 0;
}
```

---
