C Pointers
Practice Programs Collection
8 Topics • 40 Programs • With Output
1. Basic Pointer (Address & Dereference)
1.1 Basic address & dereference
#include <stdio.h>
int main() {
int a = 10;
int *p = &a; // p mein a ka address
printf("Value of a : %d\n", a);
printf("Dereference : %d\n", *p); // 10
*p = 25; // pointer se value badli
printf("After change : %d\n", a); // 25
return 0;
}
OUTPUT
Value of a : 10
Dereference : 10
After change : 25
1.2 Two variables, two pointers
#include <stdio.h>
int main() {
int x = 5, y = 20;
int *p1 = &x, *p2 = &y;
printf("x = %d, y = %d\n", *p1, *p2);
*p1 = *p1 + *p2; // x = x + y
printf("After add x = %d\n", x); // 25
return 0;
}
OUTPUT
x = 5, y = 20
After add x = 25
1.3 Pointer ki value badalna
#include <stdio.h>
int main() {
int a = 100;
int *p = &a;
printf("Before: %d\n", *p);
*p += 50; // value 50 badhao
printf("After : %d\n", *p); // 150
return 0;
}
OUTPUT
Before: 100
After : 150
GKDB - C Pointer Programs - Page 1
1.4 float pointer
#include <stdio.h>
int main() {
float f = 3.5;
float *p = &f;
printf("Value : %.2f\n", *p);
*p = *p * 2;
printf("Double: %.2f\n", *p); // 7.00
return 0;
}
OUTPUT
Value : 3.50
Double: 7.00
1.5 char pointer
#include <stdio.h>
int main() {
char ch = 'A';
char *p = &ch;
printf("Char : %c\n", *p);
*p = 'Z';
printf("New : %c\n", *p); // Z
return 0;
}
OUTPUT
Char : A
New : Z
2. Null Pointer
2.1 Null check
#include <stdio.h>
int main() {
int *p = NULL;
if (p == NULL) printf("Pointer NULL hai\n");
int a = 50; p = &a;
if (p != NULL) printf("Ab valid, value = %d\n", *p);
return 0;
}
OUTPUT
Pointer NULL hai
Ab valid, value = 50
GKDB - C Pointer Programs - Page 2
2.2 Null se crash bachao
#include <stdio.h>
int main() {
int *p = NULL;
if (p != NULL) printf("%d\n", *p);
else printf("Safe: NULL pointer dereference nahi kiya\n");
return 0;
}
OUTPUT
Safe: NULL pointer dereference nahi kiya
2.3 Null assign later
#include <stdio.h>
int main() {
int *p = NULL;
printf("Step1: pointer NULL\n");
int num = 99;
p = #
printf("Step2: value = %d\n", *p); // 99
return 0;
}
OUTPUT
Step1: pointer NULL
Step2: value = 99
2.4 Function returning NULL
#include <stdio.h>
int* getPtr(int flag, int *val) {
if (flag) return val;
return NULL;
}
int main() {
int a = 7;
int *p = getPtr(0, &a);
if (p == NULL) printf("NULL mila\n");
p = getPtr(1, &a);
if (p) printf("Value = %d\n", *p); // 7
return 0;
}
OUTPUT
NULL mila
Value = 7
GKDB - C Pointer Programs - Page 3
2.5 Reset to NULL after use
#include <stdio.h>
int main() {
int a = 10;
int *p = &a;
printf("Use: %d\n", *p);
p = NULL; // ab dangling na rahe
if (p == NULL) printf("Pointer reset to NULL\n");
return 0;
}
OUTPUT
Use: 10
Pointer reset to NULL
3. Pointer to Pointer (Double Pointer)
3.1 Basic double pointer
#include <stdio.h>
int main() {
int a = 100;
int *p = &a;
int **pp = &p;
printf("a=%d *p=%d **pp=%d\n", a, *p, **pp);
**pp = 200;
printf("After: a = %d\n", a); // 200
return 0;
}
OUTPUT
a=100 *p=100 **pp=100
After: a = 200
3.2 Teeno levels print
#include <stdio.h>
int main() {
int x = 5;
int *p = &x;
int **pp = &p;
printf("x via p : %d\n", *p);
printf("x via pp : %d\n", **pp);
return 0;
}
OUTPUT
x via p : 5
x via pp : 5
GKDB - C Pointer Programs - Page 4
3.3 Double pointer se modify via function
#include <stdio.h>
void setValue(int **pp) { **pp = 500; }
int main() {
int a = 1;
int *p = &a;
setValue(&p);
printf("a = %d\n", a); // 500
return 0;
}
OUTPUT
a = 500
3.4 Pointer ko function se change
#include <stdio.h>
int g = 77;
void point(int **pp) { *pp = &g; }
int main() {
int *p = NULL;
point(&p);
printf("Value = %d\n", *p); // 77
return 0;
}
OUTPUT
Value = 77
3.5 Triple level samajh
#include <stdio.h>
int main() {
int v = 9;
int *p = &v;
int **pp = &p;
int ***ppp = &pp;
printf("***ppp = %d\n", ***ppp); // 9
***ppp = 18;
printf("v = %d\n", v); // 18
return 0;
}
OUTPUT
***ppp = 9
v = 18
4. Function Pointer
GKDB - C Pointer Programs - Page 5
4.1 Basic function pointer
#include <stdio.h>
int add(int a, int b) { return a + b; }
int main() {
int (*fp)(int,int) = add;
printf("Add = %d\n", fp(5,3)); // 8
return 0;
}
OUTPUT
Add = 8
4.2 Switch between functions
#include <stdio.h>
int add(int a,int b){return a+b;}
int mul(int a,int b){return a*b;}
int main() {
int (*fp)(int,int);
fp = add; printf("Add=%d\n", fp(4,2));
fp = mul; printf("Mul=%d\n", fp(4,2));
return 0;
}
OUTPUT
Add=6
Mul=8
4.3 Function pointer as argument
#include <stdio.h>
int square(int n){return n*n;}
void run(int (*f)(int), int x){ printf("Result=%d\n", f(x)); }
int main() {
run(square, 6); // 36
return 0;
}
OUTPUT
Result=36
GKDB - C Pointer Programs - Page 6
4.4 Array of function pointers
#include <stdio.h>
int add(int a,int b){return a+b;}
int sub(int a,int b){return a-b;}
int mul(int a,int b){return a*b;}
int main() {
int (*ops[3])(int,int) = {add, sub, mul};
printf("Add=%d\n", ops[0](10,4));
printf("Sub=%d\n", ops[1](10,4));
printf("Mul=%d\n", ops[2](10,4));
return 0;
}
OUTPUT
Add=14
Sub=6
Mul=40
4.5 Calculator using function pointer
#include <stdio.h>
int add(int a,int b){return a+b;}
int sub(int a,int b){return a-b;}
int main() {
int (*fp)(int,int);
char op = '+';
fp = (op=='+') ? add : sub;
printf("Answer=%d\n", fp(8,3)); // 11
return 0;
}
OUTPUT
Answer=11
5. Array & Pointer Relation
5.1 Array via pointer
#include <stdio.h>
int main() {
int arr[3] = {10,20,30};
int *p = arr;
printf("%d %d %d\n", *p, *(p+1), *(p+2));
return 0;
}
OUTPUT
10 20 30
GKDB - C Pointer Programs - Page 7
5.2 Loop with pointer
#include <stdio.h>
int main() {
int arr[5] = {1,2,3,4,5};
int *p = arr, i;
for (i=0;i<5;i++) printf("%d ", *(p+i));
printf("\n");
return 0;
}
OUTPUT
1 2 3 4 5
5.3 Sum of array using pointer
#include <stdio.h>
int main() {
int arr[5] = {10,20,30,40,50};
int *p = arr, sum = 0, i;
for (i=0;i<5;i++) sum += *(p+i);
printf("Sum = %d\n", sum); // 150
return 0;
}
OUTPUT
Sum = 150
5.4 arr[i] vs *(arr+i)
#include <stdio.h>
int main() {
int arr[3] = {7,8,9};
printf("arr[1] = %d\n", arr[1]);
printf("*(arr+1) = %d\n", *(arr+1));
return 0;
}
OUTPUT
arr[1] = 8
*(arr+1) = 8
5.5 Max element using pointer
#include <stdio.h>
int main() {
int arr[5] = {3,9,2,8,5};
int *p = arr, max = *p, i;
for (i=1;i<5;i++) if (*(p+i) > max) max = *(p+i);
printf("Max = %d\n", max); // 9
return 0;
}
OUTPUT
Max = 9
6. Pointer Arithmetic
GKDB - C Pointer Programs - Page 8
6.1 Increment / decrement
#include <stdio.h>
int main() {
int arr[4] = {1,2,3,4};
int *p = arr;
printf("%d\n", *p); // 1
p++; printf("%d\n", *p); // 2
p--; printf("%d\n", *p); // 1
return 0;
}
OUTPUT
1
2
1
6.2 Jump with p+n
#include <stdio.h>
int main() {
int arr[5] = {10,20,30,40,50};
int *p = arr;
printf("%d\n", *(p+3)); // 40
return 0;
}
OUTPUT
40
6.3 Pointer difference
#include <stdio.h>
int main() {
int arr[5];
int *s = &arr[0], *e = &arr[4];
printf("Distance = %ld\n", e - s); // 4
return 0;
}
OUTPUT
Distance = 4
6.4 Reverse print using pointer
#include <stdio.h>
int main() {
int arr[4] = {1,2,3,4};
int *p = &arr[3];
while (p >= arr) { printf("%d ", *p); p--; }
printf("\n"); // 4 3 2 1
return 0;
}
OUTPUT
4 3 2 1
GKDB - C Pointer Programs - Page 9
6.5 Compare two pointers
#include <stdio.h>
int main() {
int arr[3] = {1,2,3};
int *a = &arr[0], *b = &arr[2];
if (b > a) printf("b aage hai\n");
printf("Gap = %ld\n", b - a); // 2
return 0;
}
OUTPUT
b aage hai
Gap = 2
7. Swap Using Pointers (Call by Reference)
7.1 Basic swap
#include <stdio.h>
void swap(int *x,int *y){int t=*x;*x=*y;*y=t;}
int main() {
int a=5,b=9;
swap(&a,&b);
printf("a=%d b=%d\n", a, b); // 9 5
return 0;
}
OUTPUT
a=9 b=5
7.2 Swap without third var
#include <stdio.h>
void swap(int *x,int *y){*x=*x+*y;*y=*x-*y;*x=*x-*y;}
int main() {
int a=3,b=7;
swap(&a,&b);
printf("a=%d b=%d\n", a, b); // 7 3
return 0;
}
OUTPUT
a=7 b=3
7.3 Swap float
#include <stdio.h>
void swap(float *x,float *y){float t=*x;*x=*y;*y=t;}
int main() {
float a=1.5,b=2.5;
swap(&a,&b);
printf("a=%.1f b=%.1f\n", a, b); // 2.5 1.5
return 0;
}
OUTPUT
a=2.5 b=1.5
GKDB - C Pointer Programs - Page 10
7.4 Swap chars
#include <stdio.h>
void swap(char *x,char *y){char t=*x;*x=*y;*y=t;}
int main() {
char a='X',b='Y';
swap(&a,&b);
printf("a=%c b=%c\n", a, b); // Y X
return 0;
}
OUTPUT
a=Y b=X
7.5 Modify via reference
#include <stdio.h>
void addTen(int *n){*n += 10;}
int main() {
int x = 5;
addTen(&x);
printf("x = %d\n", x); // 15
return 0;
}
OUTPUT
x = 15
8. String with Pointer
8.1 Print string char by char
#include <stdio.h>
int main() {
char str[] = "GKDB";
char *p = str;
while (*p) { printf("%c", *p); p++; }
printf("\n");
return 0;
}
OUTPUT
GKDB
8.2 String length
#include <stdio.h>
int main() {
char str[] = "Hello";
char *p = str; int len = 0;
while (*p) { len++; p++; }
printf("Length = %d\n", len); // 5
return 0;
}
OUTPUT
Length = 5
GKDB - C Pointer Programs - Page 11
8.3 Count vowels
#include <stdio.h>
int main() {
char str[] = "education";
char *p = str; int v = 0;
while (*p) {
if (*p=='a'||*p=='e'||*p=='i'||*p=='o'||*p=='u') v++;
p++;
}
printf("Vowels = %d\n", v); // 5
return 0;
}
OUTPUT
Vowels = 5
8.4 Copy string using pointers
#include <stdio.h>
int main() {
char src[] = "Copy", dest[20];
char *s = src, *d = dest;
while (*s) { *d = *s; s++; d++; }
*d = '\0';
printf("Dest = %s\n", dest); // Copy
return 0;
}
OUTPUT
Dest = Copy
8.5 Reverse string using pointers
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "ABCD";
char *start = str, *end = str + strlen(str) - 1;
while (start < end) {
char t = *start; *start = *end; *end = t;
start++; end--;
}
printf("Reversed = %s\n", str); // DCBA
return 0;
}
OUTPUT
Reversed = DCBA
GKDB - C Pointer Programs - Page 12