j.j.fishbat@[EMAIL PROTECTED]
wrote:
[...]
> > The problem is that dat is defined as char *. You can't pretend it's
> > defined as a void *. The language doesn't let you.
>
> are you saying that
>
> ---
> int foo(void* bar)
> {
[...]
> :
> char *bar;
> :
> foo((void*)bar);
> ---
>
> is not possible in C?
That's not the same thing. In your original post, you had:
static int punme(void **dat,size_t newsize)
...
char *dat = malloc(30);
int ret = punme((void **)&dat,40);
Here, you are telling punme that is gets passed a pointer to "void *"
but you are passing a pointer to "char *". Note "pointer to" in both
of those pieces.
[...]
> Is there really no way at all to modify a generic
> pointer by passing a reference to it to a function?
> Are C programmers condemned to return structs
> (one member of which is the void* modified) whenever
> we want to do generic programming??
But you are not modifying a "generic pointer". Or, at least, you
are not _passing_ a "generic pointer".
Consider the fact that a "void *" and a "char *" need not be stored
the same way. Yes, a function can take a "void *" and you can pass
it a "char *", but that is because the value will be converted to a
"void *" before being passed. However, what you are trying to do is
pass a pointer to "char *", while a pointer to "void *" is expected.
No conversion of your original "char *" will take place. This is
the same as if you had:
void foo(double *pt)
...
float f;
foo((double *)&f);
In your case, the program "works" because, in all likelihood, the
representation of "void *" and "char *" are the same.
--
+-------------------------+--------------------+-----------------------+
| Kenneth J. Brody | www.hvcomputer.com | #include |
| kenbrody/at\spamcop.net | www.fptech.com | <std_disclaimer.h> |
+-------------------------+--------------------+-----------------------+
Don't e-mail me at: <mailto:ThisIsASpamTrap@[EMAIL PROTECTED]
>


|