From: chrhenz AT aol DOT com (ChrHenz) Newsgroups: comp.os.msdos.djgpp Subject: Re: Pointer problem Date: 4 Jan 1998 14:54:21 GMT Lines: 54 Message-ID: <19980104145401.JAA15892@ladder02.news.aol.com> NNTP-Posting-Host: ladder02.news.aol.com References: <01bd182a$edde3de0$4d3e64c2 AT default> Organization: AOL Bertelsmann Online GmbH & Co. KG http://www.germany.aol.com To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Im Artikel <01bd182a$edde3de0$4d3e64c2 AT default>, "laine" schreibt: >Hi! > >How can I make a pointer to an array? > >I'm not sure if it's called an array, but it's like this: > array[5][1] (for example) > >Thanks > This one is from taken the FAQ of comp.lang.c : 2.10: My compiler complained when I passed a two-dimensional array to a routine expecting a pointer to a pointer. A: The rule by which arrays decay into pointers is not applied recursively. An array of arrays (i.e. a two-dimensional array in C) decays into a pointer to an array, not a pointer to a pointer. Pointers to arrays can be confusing, and must be treated carefully. (The confusion is heightened by the existence of incorrect compilers, including some versions of pcc and pcc-derived lint's, which improperly accept assignments of multi-dimensional arrays to multi-level pointers.) If you are passing a two-dimensional array to a function: int array[NROWS][NCOLUMNS]; f(array); the function's declaration should match: f(int a[][NCOLUMNS]) {...} or f(int (*ap)[NCOLUMNS]) {...} /* ap is a pointer to an array */ In the first declaration, the compiler performs the usual implicit parameter rewriting of "array of array" to "pointer to array;" in the second form the pointer declaration is explicit. Since the called function does not allocate space for the array, it does not need to know the overall size, so the number of "rows," NROWS, can be omitted. The "shape" of the array is still important, so the "column" dimension NCOLUMNS (and, for 3- or more dimensional arrays, the intervening ones) must be included. If a function is already declared as accepting a pointer to a pointer, it is probably incorrect to pass a two-dimensional array directly to it. References: K&R I Sec. 5.10 p. 110; K&R II Sec. 5.9 p. 113. Hope that helps... Christian.