# Help passing nxn array to 2d array.

• 06-06-2009
beglaryanh
Help passing nxn array to 2d array.
So I am new at C, and I am having trouble passing an NxN array to my determinant function. Can someone have a look at my code and tell me where i went wrong. trying to pass nxn array to 2d pointer.
Code:

```/*Hrach Beglaryan  */ #include <stdio.h> #include <math.h> #include <stdlib.h> double Determinant(double **a,int n) {   double **b= NULL;   double det = 0;   int i,j,k,p;       if (n < 1) { //doesnt make sense   } else if (n == 1) { //determinant is itself       det = a[0][0];   } else if (n == 2) {       det = a[0][0]*a[1][1]-a[1][0]*a[0][1];   } else {       det = 0;       for (k=0;k<n;k++) {         b = malloc((n-1)*sizeof(double *));         for (i=0;i<n-1;i++)             b[i] = malloc((n-1)*sizeof(double));         for (i=1;i<n;i++) {             p = 0;             for (j=0;j<n;j++) {               if (j == k)                   continue;               b[i-1][p] = a[i][j];               p++;             }         }         det += pow(-1.0,1.0+k+1.0) * a[0][k] * Determinant(b,n-1);         for (i=0;i<n-1;i++)             free(b[i]);         free(b);       }   }   return(det); } void Transpose(double **a,int n) {   int i,j;   int x,y;   double z; //temporary allocation   for (i=1;i<n;i++) {       for (j=0;j<i;j++) {         z = a[i][j];         a[i][j] = a[j][i];         a[j][i] = z;       }   }         for(x=0;x<n;x++)         for(y=0;y<n;y++)         printf("%d",a[x][y]); } int main() {                 int n=0;         int i=0,j=0;         double **c;         double a[n][n];         int x=0,y=0;         double determinant;                printf( "\n///////////////////////////////////////////////////////////\n");         printf( "                  FUN WITH LINEAR ALGEBRA\n");         printf("/////////////////////////////////////////////////////////////");         printf("\nPlease Enter the dimension of the square matrix");         scanf("%d",&n);                 printf( "Please enter elements of the matrix");         {         for(x=0;x<n;++x)         for(y=0;y<n;++y)         {         printf("\nPlease enter the [%d][%d] element",x,y);         scanf("%d",&a[x][y]);         }         }                 for(i=0;i<n;i++)         for(j=0;j<n;j++)         for(x=0;x<n;x++)         for(y=0;y<n;y++)         c[i][j]=a[x][y]; //I get a segmentation fault here. I understand that it only lets me put my first element [0][0].         determinant=Determinant(c,n);                 printf("The Determinant of the matix is ", determinant);         Transpose(c,n);                         }```
• 06-06-2009
beglaryanh
I'm sorry. I meant to say iim tryin to pass an nxn array to a 2d pointer.
• 06-06-2009
MacGyver
Quote:

Originally Posted by beglaryanh
I'm sorry. I meant to say iim tryin to pass an nxn array to a 2d pointer.

That isn't going to work, because arrays and pointers are different.

If I'm not mistaken, this is a possibility: Pass a pointer to the array (which is different than passing a pointer to the first element!). If you're using VLAs, you're hopefully using C99 as your standard. That will allow you to dynamically specify the size of the array that your pointer points to.

I wouldn't really recommend this, though:

Code:

```int n=0; ... double a[n][n];```
What is the purpose in this? Bleh.