Hi Christian,
cstrato <aon.912121399@aon.at> wrote concerning
[ROOT] passing table [Sat, 06 Sep 2003 21:08:22 +0200]
----------------------------------------------------------------------
> Sorry for this non root question:
> I have a function:
> void MyFunction(Int_t n, Int_t m, Double_t **table)
>
> Usually I create the table on the heap an pass it to MyFunction().
> However, when I create the table on the stack:
> Double_t table[4][8]
> I am unable to pass it to MyFunction()
The conversion from `double(*)[]' to `double**' isn't legal. In the
first case, you have a specific memory layout, while in the latter, it
is completely arbitrary.
> you know how to pass the table to MyFunction()?
I would suggest using `calculated index', or perhaps `std::valarray'.
For the former, see the attached file.
Yours,
___ | Christian Holm Christensen
|_| | -------------------------------------------------------------
| | Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91
_| DK-2200 Copenhagen N Cell: (+45) 24 61 85 91
_| Denmark Office: (+45) 353 25 305
____| Email: cholm@nbi.dk Web: www.nbi.dk/~cholm
| |
#include <iostream>
#include <iomanip>
#include <vector>
void function(double** array, size_t n, size_t m)
{
std::cout << "Array of size (" << n << "x" << m << "): " << std::endl;
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < m; ++j)
std::cout << std::setw(3) << array[i][j] << std::flush;
std::cout << std::endl;
}
}
void function(double* array, size_t n, size_t m)
{
std::cout << "Array of size (" << n << "x" << m << "): " << std::endl;
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < m; ++j)
std::cout << std::setw(3) << array[i * n + j] << std::flush;
std::cout << std::endl;
}
}
int main()
{
double** a1 = new double*[3];
for (size_t i = 0; i < 3; ++i) {
a1[i] = new double[2];
for (size_t j = 0; j < 2; ++j)
a1[i][j] = i * 10 + j;
}
function(a1, 3, 2);
double a2[2][3];
for (size_t i = 0; i < 2; ++i)
for (size_t j = 0; j < 3; ++j)
a2[i][j] = 10 * j + i;
// function(&(a2[0]), 2, 3);
double a3[6];
for (size_t i = 0; i < 2; ++i)
for (size_t j = 0; j < 3; ++j)
a3[i * 2 + j] = 10 * j + i;
function(a3, 2, 3);
return 0;
}
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:15 MET