Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!apple!ames!haven!mimsy!chris From: chris@mimsy.UUCP (Chris Torek) Newsgroups: comp.lang.c Subject: Re: typedefing arrays Keywords: kludge hack bogus Message-ID: <17895@mimsy.UUCP> Date: 5 Jun 89 23:56:47 GMT References: <4636@alvin.mcnc.org> Organization: U of Maryland, Dept. of Computer Science, Coll. Pk., MD 20742 Lines: 46 In article <4636@alvin.mcnc.org> spl@mcnc.org (Steve Lamont) writes: > Is it possible to do something like > > typedef int vertex[3]; This creates a type alias called `vertex' which means `array 3 of int'. > vertex *v; Thus, this declares v as `pointer to array 3 of int', and > v = (vertex *) malloc( sizeof( vertex ) * some_number ); this calls malloc with an argument of `sizeof(int [3])*n' and casts the result to `pointer to array 3 of int'. >My compiler will swallow it, and, if I play all sorts of funny games >with pointer dereferencing, I can even put numbers into the array v and >pull them out again in some semblance of correct order. However, all of >the solutions I come up with are inelegant, at best. The return from malloc, as cast and stored in v (if not nil), is suitable for use as an `array n of array 3 of int' (I am using `n' where you have `some_number'). To talk about the third `vertex', write v[2] (the first vertex is v[0], not v[1]). This is an object of type `array 3 of int'; in most contexts, it is transformed into one of type `pointer to int', which then points to the first of the three `int's. >Is this a sensible thing to do? Yes. >... How do I reference individual elements (v[0], v[1], v[2]) as I am >able to in the first instance (v->x, v->y, >v->z)? v[0][0] is the first int in the first array of 3 ints; v[0][1] is the second int in the first array of 3 ints; v[0][2] is the third int in the first array of 3 ints. All three exist if v != NULL and if n was at least 1. These can also be written as (*v)[0], (*v)[1], and (*v)[2] respectively, and the first has yet another form, **v. -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163) Domain: chris@mimsy.umd.edu Path: uunet!mimsy!chris