I was unable to run this program due to certain errors...can anyone please rectify the errors...I am unable to return a 2D array properly from a function..help me..:nonod: Code: #include<stdio.h> #include<stdlib.h> #include<math.h> #define max 4 int a[max][max]; int s=0; int **minor(int arr[][max],int i,int j); int det(int arr[][max],int i,int j); int main() { int i,j,n; // int **b; //b=(int **)malloc((max-1)*sizeof(int)); int **b,q; b=(int **)malloc((max-1)*sizeof(int *)); for (q= 0; q< max-1; q++){ b[q]= (int *) malloc((max-1)* sizeof(int)); } printf("enter the elements of the array::\n"); for(i=0;i<max;i++) { for(j=0;j<max;j++) { scanf("%d",&n); a[i][j]=n; } } b=minor(a,2,1); printf("the minor array::\n"); for(i=0;i<max-1;i++) { for(j=0;j<max-1;j++) { printf("data=%d\n",b[i][j]); } } return(0); } int **minor(int arr[][max],int i,int j) { int p[max-1][max-1]; int **b,q; b=(int **)malloc((max-1)*sizeof(int *)); for (q= 0; q< max-1; q++){ b[q]= (int *) malloc((max-1)* sizeof(int)); } int k=0,l=0,x=0,y=0; printf("katti"); //b=(int **)malloc(sizeof(a)); for(x=0;x<max;x++) {l=0; for(y=0;y<max;y++) {//printf("data=%d\n",arr[x][y]); if(x!=i && y!=j) { b[k][l]=arr[x][y]; printf("data=%d\n",b[k][l]); l++; } } if(x!=i) k++; } return(b); } int det(int arr[][max],int i,int j) { if(sizeof(a)==sizeof(int *)) { s=s+arr[0][0]; if(i==max-1) return(s); else return(det(arr,i+1,j)); } else return(pow(-1,(i+j))*arr[i][j]*det(minor(arr,i,j),i,j)); }
I have found an alterantive by passing structures...if u can do it by passing 2d arrays...plz plz plz help...i am posting my program by the use of structures... Code: #include<stdio.h> #include<stdlib.h> #include<math.h> struct matrix { int order; int **array; }; int creatematrix(struct matrix *p,int ord); int calcminor(struct matrix *p,struct matrix *min,int row,int col); int calcdet(struct matrix *p); void inputmatrix(struct matrix *p); int main() { struct matrix p; int ord; printf("enter the order::\n"); scanf("%d",&ord); if(creatematrix(&p,ord)) inputmatrix(&p); printf("the determinant calculated=%d\n",calcdet(&p)); return(0); } int creatematrix(struct matrix *p,int ord) { int i; p->order=ord; p->array=(int **)malloc(ord*sizeof(int *)); for(i=0;i<ord;i++) { p->array[i]=(int *)malloc(ord*sizeof(int)); if(!p->array) return(0); } return(1); } void inputmatrix(struct matrix *p) { int i,j; for(i=0;i<p->order;i++) { for(j=0;j<p->order;j++) { printf("enter the element::\n"); scanf("%d",&(p->array[i][j])); } } } int calcdet(struct matrix *p) { int i,result=0; struct matrix min; if(p->order==1) return(p->array[0][0]); for(i=0;i<p->order;i++) { if(calcminor(p,&min,0,i)) result=result+(pow(-1,i)*(p->array[0][i])*calcdet(&min)); } return(result); } int calcminor(struct matrix *p,struct matrix *min,int row,int col) { int i,j,a,b; if( p->order <= 1 ) return 0; if( row >= p->order || col >= p->order ) return 0; if( !creatematrix( min, p->order-1 )) return 0; a = b = 0; for( i = 0; i <p->order; i++ ) { if( i != row ) { b = 0; for( j = 0; j <p->order; j++ ) { if( j != col ) { min->array[a][b] = p->array[i][j]; b++; // Increase column-count of minor } } a++; // Increase row-count of minor } } }
The compiler is dev c++.... errors are: cannot convert `int**' to `int (*)[4]' for argument `1' to `int det(int (*)[4], int, int)'
I know this a very old thread, but I bumped into the same problem in my own work, and just found a solution. No one has a solution posted elsewhere on the web, so I'm posting it here for the next person who lands here to find... Problem: Some libraries want you to pass a multidimensional array as a parameter. You have just the right array as a private field somewhere in one of your classes. You need to provide an accessor function so that the private field can be passed to the library, but C++ won't let you write a function that returns an array. The library function is declared as: Code: void lib_fun (const float x[][4]); It will not accept arguments of type float* (compiler error). You try writing the following function: Code: float _matrix[4][4]; float matrix()[4][4] { return _matrix; } ...but the compiler complains that matrix() returns an array, which is apparently illegal. Solution: Make your accessor function return a pointer to the array. Sounds simple, right? In fact, you thought that was what you were doing all along when you wrote the accessor described above. What is _matrix anyway other than a pointer with a little syntactic sugar? Well, I won't go into the reasons why C++ doesn't allow functions returning an array, since I don't know them myself. Ask Stroustrup. Probably some ambiguity about whether you want value or reference semantics. The way around the restriction is to add one more level of redirection: Code: float (*matrix()) [4][4] { return &_matrix; } This works, and Code: lib_fun(*matrix()); will work properly. If you want const correctness, the proper definition would be: Code: const float (*matrix() const) [4][4] { return &_matrix; } The positioning of the second const is not entirely obvious. Have fun, Alex