Recently I encountered a problem in a company’s coding round which had a question of rotating a matrix in multiples of 90 degrees. The catch for me was not the algorithm or rotation of array but to “pass the 2-D array in a function”. The question is definitely a good one, but here I will scrutinize the passing of a matrix as an argument in C++.
I tried to figure it out during the contest but was unable to do it back then, obviously because of the limited time allotted for the completion of the challenge. So I immediately converted my code to C language.
Here’s a straightforward way to do it in C language:
void func(int m, int n, int arr[][n]) //function prototype
{
printf("%d", arr[0][0]); //accessing an element of the array
}
The main function would look like this:
int main()
{ int m, n;
scanf("%d %d", &m,&n);
int arr[m][n];
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
scanf("%d", &arr[i][j]);
func(m, n, arr); //function call
return 0;
}
As simple as it seems!
But a similar solution would throw errors in C++.
After the contest was over, I was very curious to find the problem in my code as I have been using C++ for a long time in coding competitions but didn’t clash with a problem of such kind earlier. I tried StackOverflow solutions and even asked my old training teacher to help me out with it. He told the same C solution we already discussed above. Then I contacted one of my favorite YouTubers, for the same. He told me to use vectors.
So, I will discuss below all viable solutions I found out:
It is pretty easy if the number of rows and columns are constants or defined using macros.
#2d-arrays #coding #pointers #c #cplusplus #programming-c