Novice C question
Gustaaf-Jan Heinhuis
heinhuis at dri.nl
Tue Apr 16 18:52:52 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?
>
>Thanks!
>
Well, I know why he substracts nl. The fact that you have an array from
5 to 10 implies you also have indexes 0 to 4. The lowest index your
going to use is 5 which is an offset to a base adress. To make this work
the base adress has to 5 units (= nl, unit depends on type of reserved
memory; here it's double) lower as the adress of the allocated block
of memory.
You can, however, not use p[0] to p[4] because you didn't alloc any
memory for this part of the array.
Hope this answers your question, Gustaaf-Jan.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++---===To all virgins, thanks for nothing.===---++++++++++++++
___ GJ Heinhuis student comp. sc. HIO Enschede (Holland)
/ _) Final Project at: DataCount, Wierden, Holland
| ____ ___ Mail: heinhuis at dri.nl
\__/| |
|___| Everybody is entitled to his own
| | | opinion, as long as it's mine!
\_/ | Not necessarely DataCount's opinion!!
More information about the Comp.lang.c
mailing list