How to pass a multi-dimensional array to a function?

When we pass an array to a function, what really gets passed is a pointer to the array’s base address. We know that when we declare a function that seems to accept an array as a parameter, the compiler quietly compiles the function as if that parameter were a pointer, since a pointer is what it will actually receive. What about multidimensional arrays? What kind of pointer is passed down to the function?

When we  pass a multi-dimensional array, since the first element of a multidimensional array is another array, what gets passed to the function is a pointer to an array. If you want to declare the function func in a way that explicitly shows the type which it receives, the declaration would be

func(int (*a)[7])
	{
	...
	}


The declaration int (*a)[7] says that a is a pointer to an array of 7 ints. Lets take an example of adding two matrix.

#include<stdio.h>
#define R 10
#define C 10
 
void addmat(int (*x)[],int (*y)[],int (*z)[],int,int);
void readmat(int (*a)[],int,int);
void showmat(int (*a)[],int,int);
main()
{
	int m1[R][C],m2[R][C],m3[R][C],r,c,i,j;
 
	printf("\nEnter no. of rows and columns you want to use");
	scanf("%d %d",&r,&c);
	printf("\nEnter data for matrix1");
	readmat(m1,r,c);
	printf("\nEnter data for matrix2");
	readmat(m2,r,c);
	addmat(m1,m2,m3,r,c);	
	printf("\nMatrix - 1");
	showmat(m1,r,c);
	printf("\nMatrix - 2");
	showmat(m2,r,c);
	printf("\nMatrix - 3 = Matrix -1 + Matrix -2");
	showmat(m3,r,c);	
	return 0;
}
void readmat(int (*a)[C],int r,int c)
{
	int i,j;
	for(i=0;i<r;i++)
	{
		for(j=0;j<c;j++)
		{
			scanf("%d",*(a+i)+j);
		}	
	}
}
void showmat(int (*a)[C],int r,int c)
{
	int i,j;
	for(i=0;i<r;i++)
	{
		printf("\n");
		for(j=0;j<c;j++)
		{
			printf("%d\t",*(*(a+i)+j));
 
		}	
	}
 
}
void addmat(int (*x)[C],int (*y)[C],int (*z)[C],int r,int c)
{
	int i,j;
	printf("\nAdding ...");	
	for(i=0;i<r;i++)
	{
		for(j=0;j<c;j++)
		{
			*(*(z+i)+j)=*(*(x+i)+j)+*(*(y+i)+j);
 
		}	
	}	
}


This entry was posted in Placements. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *