Path: utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!mailrus!iuvax!uceng!mfinegan From: mfinegan@uceng.UC.EDU (michael k finegan) Newsgroups: comp.lang.c Subject: Passing 2-D Arrays of unknown size ? Message-ID: <3180@uceng.UC.EDU> Date: 20 Dec 89 14:21:35 GMT Organization: Univ. of Cincinnati, College of Engg. Lines: 70 While I think the answer is no, I'll ask anyway! :-) Is there a method for passing/using multi-D arrays in subroutines, without specifying the column (fastest changing) dimension in advance ? No way to set the column length dynamically ? Any more elegant alternatives ? For example: main() { char array1[25][25], array2[50*50]; /* inefficient way if several differently sized arrays */ solution_func1(array1,25,25); /* elegant, but doesn't work ! */ solution_func2(array1,25,25); /* array1 could be ?alloc'ed ... */ /* less then elegant, especially if long calculations inside [] */ solution_func3(array2,50,50); } /* create separate function for every different size array ? */ solution_func1(array,rows,cols) char array[][MUST BE SPECIFIED as 25 !]; /* could use cols in FORTRAN! */ int rows, cols; /* and I don't even like FORTRAN! */ { int i,j; for(i ...) for(j ...) some_operation(array[i][j]); } solution_func2(array,rows,cols) char **array; int rows, cols; { int i,j; for(i ...) for(j ...) /* Only works for argv ? (argv special?), * or compiler uses '\0' to sense last col in 2-D char arrays ? * No way to let compiler know sizes ? */ some_operation(array[i][j]); } solution_func3(array,rows,cols) char *array; int rows, cols; { int i,j; /* But now I can't use array[][] notation, * and must calculate the indices myself ! */ for(i ...) for(j ...) some_operation(array[i*cols + j]); /* with typically: array[(long calculated value)*stride*cols + * stride*(another calculated value)] */ } Any ideas/examples appreciated! Maybe C++ allows overloading of [] symbols ? Mike Finegan mfinegan@uceng.UC.EDU