Return two dimensional array in c++


 
Thread Tools Search this Thread
Top Forums Programming Return two dimensional array in c++
# 1  
Old 02-20-2012
Return two dimensional array in c++

I am writing matrix multiplication and trying to return a two dimensional array from a function but I keep getting errors. Can someone please help me?

here is my code (it is just the skeleton of my program):
Code:
void main ()
{
...
int *matmultiply (int, int, int, int [] [mat_cols], int [] [vec_cols], int [][vec_cols])
...
}

int *matmultiply (int mat_rows, int mat_cols, int vec_cols, int matrix [] [mat_cols], int vector [] [vec_cols], int result [][vec_cols])
{
for (int i = 0; i < mat_rows; i++)
        {
        res = 0;      //Stores result of multiplication
     for (int k = 0; k < vec_cols; k++)
    {
    int vrows = 0;
        for (int j = 0; j < mat_cols; j++)
                {
                res = res + ((matrix [i] [j]) * (vector [vrows] [k]));
                vrows++;
                }
      result [i] [k]= res;
    }
    } 
return result;     //This is the problem
}
//matmultiply performs multiplication and returns the result matrix.

Any help is appreciated.
# 2  
Old 02-21-2012
'result' must be a global array or static array. And the return type of matmultiply should be int **, since you can't really return an array in C.
# 3  
Old 02-22-2012
Why would you need to return it? You're passing by reference, which modifies the original. The data's already accessible outside the function, in the original.

Arrays don't work that way, anyhow; most compilers won't let you define an array with the size of a parameter. Those which would, don't always get it right...

---------- Post updated at 10:29 PM ---------- Previous update was at 08:06 PM ----------

To return new memory, you'll need to actually allocate new memory (and need to remember to free it later).

Code:
#include <stdio.h>
#include <stdlib.h>

// A 2d matrix structure that can be freed with an ordinary 'free'.
typedef struct arr2d
{
	int r,c, **rows;
} arr2d;

arr2d *alloc_2d(int r, int c)
{
	arr2d *array=NULL;
	int *data, n;
	size_t size=(r*c)*sizeof(int);	// Room for r*c integers
	size += sizeof(int *)*(r+1);	// ...plus (r+1) int* pointers
	size += sizeof(arr2d);		// ...plus the structure itself
	array=(arr2d *)malloc(size);	// Now, actually allocate it

	if(array==NULL) return(NULL);	// Give up if out of mem

	array->r=r;			// Set up structure members
	array->c=c;
	array->rows=(int **)(array+1);
	data=(int *)(array->rows+r+1);

	for(n=0; n<r; n++)	// Set up row pointers
	{
		array->rows[n]=data;
		data+=c;
	}

	array->rows[r]=NULL; // Guard-pointer;  insta-crash if we go beyond it
	return(array);
}

void print_2d(const arr2d *array)
{
	int r,c;

	if(array == NULL) return; // don't print blank arrays

	for(r=0; r<array->r; r++)
	{
		for(c=0; c<array->c; c++)	printf("\t%d", array->rows[r][c]);
		printf("\n");
	}

	printf("\n");
}

arr2d *multiply_2d(const arr2d *arr1, const arr2d *arr2)
{
	int i, j, n;
	arr2d *out;

	// Don't operate on empty matrices
	if((arr1==NULL)||(arr2==NULL))	return(NULL);
	// Don't operate on arrays whose sizes don't match
	if(arr1->c != arr2->r)		return(NULL);

	// Create new matrix to write to
	out=alloc_2d(arr1->r, arr2->c);

	for(i=0; i<out->r; i++)
	for(j=0; j<out->c; j++)
	for(n=0; n<arr2->r; n++)
		out->rows[i][j] += arr1->rows[i][n] * arr2->rows[n][j];

	return(out);
}

int main(void)
{
	arr2d *arr1=alloc_2d(4, 3), *arr2=alloc_2d(3,2), *arr3=NULL;

	arr1->rows[0][0]=14;	arr1->rows[0][1]=9;	arr1->rows[0][2]=3;
	arr1->rows[1][0]=2;	arr1->rows[1][1]=11;	arr1->rows[1][2]=15;
	arr1->rows[2][0]=0;	arr1->rows[2][1]=12;	arr1->rows[2][2]=17;
	arr1->rows[3][0]=5;	arr1->rows[3][1]=2;	arr1->rows[3][2]=3;

	arr2->rows[0][0]=12;	arr2->rows[0][1]=25;
	arr2->rows[1][0]=9;	arr2->rows[1][1]=10;
	arr2->rows[2][0]=8;	arr2->rows[2][1]=5;

	arr3=multiply_2d(arr1, arr2);

	print_2d(arr1);	print_2d(arr2);	print_2d(arr3);

	free(arr1);	free(arr2);	free(arr3);
}


Last edited by Corona688; 02-22-2012 at 01:06 AM..
This User Gave Thanks to Corona688 For This Post:
# 4  
Old 03-07-2012
RE: Post questions about C, C++, Java, SQL, and other programming languages here.

Thanks For the post
# 5  
Old 06-12-2012
Arrays are call by references in c language.No need to return it.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Assign Two Dimensional Array In Bash At Once

Hi, I have a 10*10 two dimensional array. How do I assign value to all it's 100 elements at once? I don't want to open two for loops and assign one by one. Thanks, Shuri (1 Reply)
Discussion started by: shurimano
1 Replies

2. Shell Programming and Scripting

Multi Dimensional array

I have an array of names. Each one of the name, has a number represented to it. For example A has an ID 8, B has an ID 2. What I am after is a for loop that when the array is in position 1, a particular variable is set to the value of position 1 in array 2 declare -a arr=("A" "B" "C"... (6 Replies)
Discussion started by: nms
6 Replies

3. Shell Programming and Scripting

How to reference 2 dimensional array in awk?

Hello, all For a 1-dimensional array, such as myarr_1=1 myarr_1=2 myarr_1=3I know I can write a loop as below to show the array member one by one: for (i in myarr_1){print i, myarr_1}Now, suppose I have a two dimensional array such as: myarray_2=1 myarray_2=2 myarray_2=10 myarray_2=20My... (3 Replies)
Discussion started by: littlewenwen
3 Replies

4. Programming

Passing two dimensional array to a function

Hi. I have a problem with passing two dimensional array to a function. First, let me show my code to explain what i am going to do: I have function:void initialize_board(char board);which is supposed to modify content of passed array. I have read here: Question 6.18 how such arrays should be... (3 Replies)
Discussion started by: Shang
3 Replies

5. UNIX for Dummies Questions & Answers

Help: stdin to multi-dimensional array

I cant get out of this while loop at the beginning of my program. Just reading from stdin one char at a time and storing it into a multi-array. Need to fix it with in two hours. #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include... (1 Reply)
Discussion started by: unt_engn
1 Replies

6. Shell Programming and Scripting

PHP: Search Multi-Dimensional(nested) array and export values of currenly worked on array.

Hi All, I'm writing a nagios check that will see if our ldap servers are in sync... I got the status data into a nested array, I would like to search key of each array and if "OK" is NOT present, echo other key=>values in the current array to a variable so...eg...let take the single array... (1 Reply)
Discussion started by: zeekblack
1 Replies

7. Shell Programming and Scripting

2 dimensional array in unix

I am trying to implementing two dimensinal array in ksh script.Would you pls help me out. I have a large size of file, File contains looks like ID SID VLAUE1 VALUE2 TOTALVALUE 1 a1 01 02 03 1 b1 02 05 07 ... (2 Replies)
Discussion started by: pritish.sas
2 Replies

8. Shell Programming and Scripting

Multi Dimensional array in KSH

Is there any way to use multi dim. array in KSH ? (1 Reply)
Discussion started by: sinpeak
1 Replies

9. Shell Programming and Scripting

Help for record (2 dimensional array.)

I am going to develop a address book using the shell scripting commands without sed, awk, .... I am thinking to apply the concept of 2 dimenstional array. Can I create a two dimensional array for the insertion/updation/deletion of record in unix. If yes then tell me plz or recommend me some... (1 Reply)
Discussion started by: murtaza
1 Replies

10. Shell Programming and Scripting

Reference two dimensional array in Perl sub

I am trying to reference a two dimensional array in a subroutine and can't seem to figure this one out in Perl. Does anybody know? Please enlighten me. #!/usr/bin/perl -w use constant DIM => 4; sub Shift_elements_right{ my (@Input, @Output) = @_; for ($i = 0 ; $i <= DIM ;... (5 Replies)
Discussion started by: photon
5 Replies
Login or Register to Ask a Question