The following code shows an Example of Representing 2D Arrays Using Pointers.

``````//Representing a 2D array using pointers

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void BubbleSort(int *arr, int Length, void (*sw)(int*, int));
void swap(int *arr, int y);

void BubbleSort(int *arr, int Length, void (*sw)(int*, int))
{
int i, j, t, finished=1;
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(*(arr+j) > *(arr+j+1)){
(*sw)(arr, j);

finished=0;
}
}
if(finished)
break;
}
}
void swap(int *arr, int y)
{
int t;
t=*(arr+y);
*(arr+y)=*(arr+y+1);
*(arr+y+1)=t;
}
int main()
{
int i, j;
int arr1[2][5]={{4,9,2,1,3}, {12, 10, 7, 8, 6}};
int arr2[2][5]={{12, 10, 78, 55, 2}, {10, 40, 22, 3, 6}};

int (*p1)[5], (*p2)[5];
p1=arr1;
p2=arr2;

printf("First Array...\n");
for(i=0;i<2;i++)
{
for(j=0;j<5;j++)
{
printf("%d ", *(*(p1+i)+j));
}
printf("\n");
}
printf("\nSecond Array...\n");
for(i=0;i<2;i++)
{
for(j=0;j<5;j++)
{
printf("%d ", *(*(p2+i)+j));
}
printf("\n");
}
printf("\nElement by element sum of both of the above arrays...\n");
for(i=0;i<2;i++)
{
for(j=0;j<5;j++)
{
printf("%d ",  *(*(p1+i)+j) + *(*(p2+i)+j));
}
printf("\n");
}
return 0;
}``````

Output