Path: utzoo!censor!geac!torsqnt!news-server.csri.toronto.edu!rutgers!cs.utexas.edu!sdd.hp.com!ucsd!ucbvax!bloom-beacon!eru!hagbard!sunic!mcsun!tuvie!vmars!hp From: hp@vmars.tuwien.ac.at (Peter Holzer) Newsgroups: comp.lang.c Subject: Re: prototyping (oh no! not again??) Message-ID: <2182@tuvie.UUCP> Date: 27 Nov 90 14:32:36 GMT References: <1990Nov27.001813.9244@ux1.cso.uiuc.edu> Sender: news@tuvie.UUCP Distribution: comp Lines: 77 gordon@osiris.cso.uiuc.edu (John Gordon) writes: > Given that you are passing an n-dimensional array to a function, you >*MUST* explicitly provide at least n-1 of the dimensions in the argument >declaration. > For example: > if my_array is a 4-dimensional array, you *must* explicitly >provide at least 3 of the dimensions when you pass my_array to a function. > main() > { > int my_array[6][5][4][3]; > . > . > . > } > function_one(int array[6][5][4][]) > { > . > . > . > } > Note: There is a rule that governs which dimension may be left out; I >think it is one of the end ones, but I am not sure which one. You may leave out the first dimension. my_array is an array of six elements of type int [5][4][3], and is treated in expressions like a pointer to an int [5][4][3]. Thus function_one wants a pointer to int [5][4][3]. Thus it should be declared as function_one (int (* array)[5][4][3]). The form function_one(int array [][5][4][3]) is equivalent, but it looks as if array were an array, which it is not, so I recommend the first form. To answer the original posters question: The best method (compromise between speed/portability/readability) is to set up an array of pointers (to pointers ...) to items. You can then create arrays of arbitrary shape and size at runtime. E.g. #define N 20 #define M 30 main () { int ** p; int i; if ((p = malloc (N * sizeof (* p))) == NULL) error (); for (i = 0; i < N; i ++) { if ((p[i] = malloc (M * sizeof (** p))) == NULL) error (); } function_one (p); } function_one (int ** array) { for (i = 0; i < N; i ++){ for (j = 0; j < M; j ++) { /* do something with */ array [i][j]; } } } Isn't that in the FAQ list????? It should be there, because it is asked very often. -- | _ | Peter J. Holzer | Think of it | | |_|_) | Technical University Vienna | as evolution | | | | | Dept. for Real-Time Systems | in action! | | __/ | hp@vmars.tuwien.ac.at | Tony Rand |