Kras Kresh wrote:
>
> Is passing by reference even possible on circle?
Note that this is really a question about C in general rather than
CircleMUD in particular. The post would be much more on-topic in a
newsgroup such as alt.comp.lang.learn.c-c++, however, I'll answer it for
you here anyways:
You cannot pass a reference in C as you can in C++, however there are
other ways to accomplish the exact same thing by passing pointers
instead. I'll give an example here:
#include <stdlib.h>
/*
* This function will increment the integer passed to it.
*/
void int_incr(int *i)
{
*i++;
}
int main(void)
{
int j=0, k=0;
printf("j = %d, k = %d\n", j, k);
int_incr(&j);
printf("j = %d, k = %d\n", j, k);
return 0;
}
The output of the above program will be this...
j = 0, k = 0
j = 1, k = 0
Thus you can see that the int_incr function actually changed the value of
j.
Now if you want to make it look a little more (but not entirely)
C++-like, you can use macros to make it so that you don't have to
reference j when passing it, or dereference it in the function, something
like this...
#include <stdlib.h>
/*
* This function will increment it's argument.
*/
#define i (*_i)
int int_incr_f(int i)
{
i++;
}
#undef i
#define int_incr(i) int_incr_f(&(i))
int main(void)
{
int j=0, k=0;
printf("j=%d, k=%d\n", j, k);
int_incr(j);
printf("j=%d, k=%d\n", j, k);
return 0;
}
This program will also output the same as the prior one:
j=0, k=0
j=1, k=0
What's happening here is you're actually using the pre-processor to
substitute &j for j in the function call and to substitute *i for i
inside the int_incr function. After running your code through the
preprocessor it will look very much like that in the first example.
Regards, Peter
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/04/01 PST