•
•
•
•
What is DaniWeb IT Discussion Community?
You're currently browsing the C section within the Software Development category of DaniWeb, a massive community of 426,634 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 1,574 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C advertiser: Programming Forums
Views: 1622 | Replies: 4
![]() |
•
•
Join Date: Oct 2007
Posts: 6
Reputation:
Rep Power: 0
Solved Threads: 0
Hello
I am having no problem while returning 1 dimensinal array
But am having trouble with 3 dimenional array
No problem with this code
But this doesnt work
Is there anyway I can return 3 dimensional arrays ?
I am having no problem while returning 1 dimensinal array
But am having trouble with 3 dimenional array
No problem with this code
float Mat[][][];
float Mat[];
float *funct1(void)
{
return Mat;
}
void funct2()
{
float *Mat;
Mat=funct1();
}But this doesnt work
float Mat[][][];
float *funct1(void)
{
Mat[][][]={........};
return Mat;
}
void funct2()
{
float *Mat;
Mat=funct1();
}Is there anyway I can return 3 dimensional arrays ?
•
•
Join Date: Oct 2007
Posts: 41
Reputation:
Rep Power: 1
Solved Threads: 0
For example
multi_return.c: In function ‘funct1’: multi_return.c:27: warning: return from incompatible pointer type multi_return.c:27: warning: function returns address of local variable
#include <stdio.h>
float Mat[4][4][4];
float *funct1(void)
{
float Mat[4][4][4]={
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,};
return Mat;
}
void funct2()
{
int i,j,k;
float *Mat;
Mat=funct1();
for(k=0; k<4;k++)
{
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
// printf(" %f ", Mat[k][i][j]);
}
printf("\n");
}
printf("\n");
}
}
int main() {
funct2();
}•
•
Join Date: Oct 2007
Location: Cherry Hill, NJ
Posts: 1,876
Reputation:
Rep Power: 11
Solved Threads: 193
I'm sure you are getting a perfectly fine return value. Your problem is that you have not supplied any type information that the compiler can use to "know" about your array.
First, please see the Wikipedia here.
Next, please be aware that only the first dimension can be [] in C, and only when you are not actually creating data. Other dimensions must have a size. So
is an error, as is
but
is not.
However,
If your array has variable size dimensions, then you should use a simple flat array (or pointer) and calculate things on your own:
If your Mat object is a variable-sized array, you should create a small library of functions to handle it, and place all relevant information in a structure. For example:
Hope this helps.
First, please see the Wikipedia here.
Next, please be aware that only the first dimension can be [] in C, and only when you are not actually creating data. Other dimensions must have a size. So
int Mat[][][];is an error, as is
int Mat [][10][5];but
void printarray( int a[][10][5], int depth );is not.
However,
int *Mat; knows nothing about how many dimensions the array has, or even if it really is an array.If your array has variable size dimensions, then you should use a simple flat array (or pointer) and calculate things on your own:
int *index_2d_array( int *arr, int height, int width, int y, int x ) {
int index = (y * width) + x;
return &(arr[ index ]);
}
// two differently sized arrays with a "center" element
int a[5][5] = {
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 7, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 }
};
int b[3][5] = {
{ 0, 0, 0, 0, 0 },
{ 0, 0, 4, 0, 0 },
{ 0, 0, 0, 0, 0 }
}
// a[3][4] = b[1][3]
*index_2d_array( a, 5, 5, 3, 4 ) = *index_2d_array( b, 3, 5, 1, 3 );If your Mat object is a variable-sized array, you should create a small library of functions to handle it, and place all relevant information in a structure. For example:
typedef struct {
int *data;
int width, height, depth;
} Mat_t;
int *Mat_element( Mat_t Mat, int z, int y, int x );Hope this helps.
•
•
Join Date: Oct 2007
Posts: 41
Reputation:
Rep Power: 1
Solved Threads: 0
thanks
I think this one works fine
I think this one works fine
#include <stdio.h>
float *array(void);
float *array(void)
{
static float Mat[4][4][4]={
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,
1.2,1.3,1.4,1.5,};
return (float *) Mat;
}
int main(void)
{
float *Mat, i;
Mat = array();
for (i = 0; i < 16; i++) {
printf("\n %f", *(Mat++));
}
return 0;
}
![]() |
•
•
•
•
•
•
•
•
DaniWeb C Marketplace
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
- Returning 2-dimensional array, how? (C)
- two dimensional array (C)
- multi dimensional array search xml parser (PHP)
- Need help passing a multi-dimensional array (C++)
- Trying to create a method to convert string letters into a two dimensional array (Java)
- Need Help With two-dimensional array (VB.NET)
- Safe Array (C++)
Other Threads in the C Forum
- Previous Thread: Need help in a very easy C progrem
- Next Thread: Copy argv to string in C(newbie question)



Linear Mode