C - Passing pointers to functions
Overview
Passing Pointers to Functions in C
Pass pointers when a function must modify caller-owned data or when you want to avoid copying large structures.
Learning Objectives
- Pass pointers to allow in-place modification.
- Understand pointer parameter contracts and nullability.
Prerequisites
- C - Pointers
- C - Functions
- C - Pointer arithmetic (optional)
Example
#include <stdio.h>
void increment(int *p) {
    if (p) { (*p)++; }
}
int main(void) {
    int x = 10;
    increment(&x);
    printf("x = %d\n", x);
}
Output: x = 11
Swap two numbers
#include <stdio.h>
void swap(int *a, int *b) {
  int temp = *a;
  *a = *b;
  *b = temp;
}
int main(void) {
  int x = 5, y = 8;
  swap(&x, &y);
  printf("x = %d, y = %d\n", x, y);
}
Operate on arrays via pointer parameters
#include <stdio.h>
void doubleArray(int *arr, int n) {
  for (int i = 0; i < n; i++) { arr[i] *= 2; }
}
int main(void) {
  int nums[] = {1, 2, 3, 4};
  int n = (int)(sizeof nums / sizeof nums[0]);
  doubleArray(nums, n);
  for (int i = 0; i < n; i++) printf("%d ", nums[i]);
  printf("\n");
}
Common Pitfalls
- Passing NULLand dereferencing without a check.
- Forgetting that arrays decay to pointers; you must pass the length separately.
Checks for Understanding
- How do you modify a caller’s variable inside a function?
- Why must you pass the array length along with the pointer?
Show answers
- Pass its address and dereference inside: void f(int *p){ *p = ...; }
- Because the function only receives a pointer; it doesn’t know the array size.
Expected Output
x = 11x = 8, y = 52 4 6 8 
Exercises
- Write void clamp(int *p, int min, int max)that clamps*pinto[min, max].
- Implement void scale(int *arr, int n, int factor)to multiply each element byfactor.