Why this shows warning:
#include
foo (const char **p)
{
}
int main(int argc , char **argv)
{
foo(argv);
}
But following
Depending on your compilation flags, you might need an explicit cast when assigning cp's content to ccp.
See the C FAQ list
You can cast in order to remove warnings:
foo((const char **)argv);
But as FAQ says: the need for such a cast may indicate a deeper problem which the cast doesn't really fix.
In the first version you are casting between two different types of pointer not simply adding a const
to the pointer.
char **
is a pointer to a (pointer to a char
)const char **
is a pointer to a (pointer to a const char
)As you can see these pointer point to different types similar to the more obviously questionable:
int *i;
double *d;
d = i;
In your second example you see that you can cast from a pointer to a const pointer so if you were to apply this to your situation you would need to have a const pointer to (a pointer to a char
).
foo(char * const *p);