Novice C question
Michael Coffin
mhcoffin at tolstoy.waterloo.edu
Wed Apr 17 01:12:20 AEST 1991
In article <31969 at usc> ajayshah at almaak.usc.edu (Ajay Shah) writes:
>Consider this fragment of C code (from Numerical Recipes):
>
>1 double *dvector(nl,nh)
>2 int nl,nh;
>3 {
>4 double *v;
>5
>6 v=(double *)malloc((unsigned) (nh-nl+1)*sizeof(double));
>7 if (!v) nrerror("allocation failure in dvector()");
>8 return v-nl;
>9 }
>
>It's supposed to be a function which allocates a vector of
>doubles. My interpretation of nl and nh is: they're array
>indexes. If you want to allocate an array going from 5 to 10,
>you would say p = dvector(5, 10).
>
>Question: what is happening on line 8? Why is he not just
>returning v (a pointer)? What is the meaning of subtracting nl
>(an int) from v without any casting?
The intention is to return a pointer to a phantom array location nl
spaces to the "left" of the leftmost space actually allocated, so that
after calling, for example,
d = dvector(2,4)
d[2],d[3], and d[4] would be within the space actually allocated.
Although this will work with many C compilers, the ANSI standard does
not give its blessing. A compiler is entitled to produce code
that issues an error message or dumps core when it evaluates the
expression "v-nl" for positive nl.
Michael Coffin mhcoffin at watmsg.waterloo.edu
Dept. of Computer Science office: (519) 885-1211
University of Waterloo home: (519) 725-5516
Waterloo, Ontario, Canada N2L 3G1
More information about the Comp.lang.c
mailing list