Dear Christian
Thank you for your extensive example explaining the three different
ways to create a table. I was afraid to hear that the second way will
not work.
Best regards
Christian
Christian Holm Christensen wrote:
>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