I have a problem when I try to pass the pointer of an array (which contains parameters needed by some functions in my program) to a structure, which then should be passed to those functions. GSL for example wants me to pass parameters in this way.
A little example program looks like this:
#include <iostream> using namespace std; struct myparams { double * a; double ** b; }; int main() { double c[10] = {0,1,2,3,4,5,6,7,8,9}; double d[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; double** e = new double*[4]; for (int i = 0; i < 4; i++) { e[i] = new double[3]; } myparams params; // THIS WORKS: params.a = c; for (int i = 0; i < 10; i++) { cout << params.a[i] << endl; } // THIS DOESN'T WORK params.b = d; // THIS WORKS: params.b = e; delete[] e; } What is the problem with
params.b = d The Compiler complains with "cannot convert 'double[4][3]' to 'double**' in assignment" or something like that (translated from german).
double[n][m]cannot decay intodouble **, whiledouble[n]can decay intodouble *. That's why the first assignment is valid, and the latter isn't.