446,171 Members | 1,020 Online Need help? Post your question and get tips & solutions from a community of 446,171 IT Pros & Developers. It's quick & easy.

# passing a 2dimensional array of double to a function...

 P: n/a Greetings all i am having a horrible time trying to pass a 2 dimensional array of doubles to a function... basically a watered down version of my code looks like: void t1(double a[][]); int main() { double d; d = 2.3; t1(d); } void t1(double a[][]) { for(int i=0;i<5;i++) for (int j=0;j<5;j++) cout << "a["<
7 Replies

 P: n/a ff**@hotmail.com wrote: Greetings all i am having a horrible time trying to pass a 2 dimensional array of doubles to a function... basically a watered down version of my code looks like: void t1(double a[][]); int main() { double d; d = 2.3; t1(d); } void t1(double a[][]) { for(int i=0;i<5;i++) for (int j=0;j<5;j++) cout << "a["<

 P: n/a If you change your functions to look like ---- CODE ---- void t1(double **a, int y, int x); int main() { double d; d = 2.3; t1(d, 5, 5); } void t1(double **a, int y, int x) { for(int i=0;i

 P: n/a Adam wrote: I am having a horrible time trying to pass a 2-dimensional array of doubles to a function. Basically, a watered down version of my code looks like: Eventually, we expect C++ to adopt C99 style variable size arrays. Until then, you can work around this deficiency in C++ by implementing t1 in C and linking it into your program: cat t1.c #include void t1(size_t m, size_t n, double a[m][n]) { for(size_t i = 0; i < m; ++i) { for (size_t j = 0; j < n; ++j) { if (0 < j) fprintf(stdout, "\t"); fprintf(stdout, "a[%u][%u]: %f", i, j, a[i][j]); } fprintf(stdout, "\n"); } } gcc -Wall -std=c99 -pedantic -c t1.c cat main.cc #include extern "C" { void t1(size_t m, size_t n, double a[]); } int main(int argc, char* argv[]) { const size_t m = 5; const size_t n = 3; double d[m][n]; for(size_t i = 0; i < m; ++i) for (size_t j = 0; j < n; ++j) d[i][j] = 10.0*i + j; t1(m, n, d); return 0; } g++ -Wall -ansi -pedantic -o main main.cc t1.o ./main a: 0.000000 a: 1.000000 a: 2.000000 a: 10.000000 a: 11.000000 a: 12.000000 a: 20.000000 a: 21.000000 a: 22.000000 a: 30.000000 a: 31.000000 a: 32.000000 a: 40.000000 a: 41.000000 a: 42.000000 Jul 23 '05 #4

 P: n/a * James Aguilar: If you change your functions to look like ---- CODE ---- void t1(double **a, int y, int x); int main() { double d; d = 2.3; t1(d, 5, 5); } void t1(double **a, int y, int x) { for(int i=0;i DoubleVector; typedef std::vector DoubleMatrix; void display( DoubleMatrix const& m ) { for( std::size_t row = 0; row <= m.size(); ++row ) { for( std::size_t col = 0; col < m[row].size(); ++col ) { double const valueAtRowCol = m[row][col]; } } } -- A: Because it messes up the order in which people normally read text. Q: Why is it such a bad thing? A: Top-posting. Q: What is the most annoying thing on usenet and in e-mail? Jul 23 '05 #5

 P: n/a James Aguilar wrote: If you change your functions to look like ---- CODE ---- void t1(double **a, int y, int x); int main() { double d; d = 2.3; t1(d, 5, 5); } void t1(double **a, int y, int x) { for(int i=0;i| | | | +----+ +---+---+---+ +---+---+---+ | o----------------------->| | | | +----+ +---+---+---+ That is: an array of 2 pointers pointing to arrays of size 3. As you can see, those structures are completely different. *But*: The syntax to access a single element is identical in both cases. Exercise for the reader: Why is this so? Why can d be written as well as a and do both expressions produce the same machine code? -- Karl Heinz Buchegger kb******@gascad.at Jul 23 '05 #6

 P: n/a Yeah, thank you for correcting me on that. I'm also a relatively young C++ programmer, and I almost never use arrays directly after one bad experience -- I find vectors much nicer to debug and to write code for. I just hope the OP didn't follow my advice =/. - JFA1 Jul 23 '05 #7

 P: n/a thanks for all the help! alomst immediatly after posting the i realized a solution (isnt that how it always works?) i just ended up using the STL vector library similarly as someone noted above, but hopfully this can shed light for everyone. cheers & thanks, Adam. Jul 23 '05 #8

### This discussion thread is closed

Replies have been disabled for this discussion. 