Path: utzoo!mnetor!tmsoft!torsqnt!jarvis.csri.toronto.edu!rutgers!usc!cs.utexas.edu!think!ames!haven!mimsy!chris From: chris@mimsy.umd.edu (Chris Torek) Newsgroups: comp.lang.c Subject: Re: A pointer to a 3-D array, or an array of ptrs to 2-D arrays? Message-ID: <20827@mimsy.umd.edu> Date: 19 Nov 89 16:38:13 GMT References: <2765@levels.sait.edu.au> <1989Nov15.145302.3906@virtech.uucp> Organization: U of Maryland, Dept. of Computer Science, Coll. Pk., MD 20742 Lines: 48 In article <1989Nov15.145302.3906@virtech.uucp> cpcahil@virtech.uucp (Conor P. Cahill) writes: >if p is declared as > int (*p) [13][2][64]; >then p is a pointer to an array[13][2][4] of ints. More precisely, p is a pointer that can point to zero or more contiguous such objects, and: >... to place a value into position i,j,k you need to: > (*p)[i][j][k] = 6; >which says place a 6 into element i,j,k of the array to which p points. this puts a 6 into the i/j/k element of the first (0th) array to which p points. > p[i][j][k] = 6; >says place a 6 into the i,j,k'th occurance of such an array starting >at the location p. I think this is confusing. p[i] names the i'th object to which p points; this is an `array 13,2,4 of int'; then the [j] names the j'th object to which the pointer one gets by The Famous Rule points, and this is an `array 2,4 of int'; the [k] then names the k'th object to which the pointer one gets by The Rule points, which is an `array 4 of int'. This is not a modifiable object, so the assignment is not legal. > *p[i][j][k] = 6; >says place a 6 into the location pointed to by the data at the i,j,k'th >occurance of such an array starting at location p. Since the binding is *(p[i][j][k]), the resolution of p[i][j][k] is as above, but the result is in a value context, not an object context. It therefore becomes a pointer (by The Rule) and *(the-pointer-we-just-got) names the 0'th element of that k'th array of that j'th array of that i'th array of objects-to-which-p-points. This *is* a modifiable object (assuming it has not been declared `const') and the assignment is legal, providing that p really points to at least i contiguous objects, and providing that j and k are in bounds. >Also note that *p[12][1][3] caused a core dump since it is way beyond >the end of address space for this program. Right: p only points to one object, and p[12] asks for the thirteenth (p[0] being the first). -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163) Domain: chris@cs.umd.edu Path: uunet!mimsy!chris