In one of the C++ programs, I saw a function prototype : int Classifier::command(int argc, const char*const* argv)
What does const char*const* argv
mean? Is it the same as const char* argv[]
? Does const char** argv
also mean the same?
The difference is that const char * is a pointer to a const char , while char * const is a constant pointer to a char . The first, the value being pointed to can't be changed but the pointer can be. The second, the value being pointed at can change but the pointer can't (similar to a reference).
const char* is a mutable pointer to an immutable character/string. You cannot change the contents of the location(s) this pointer points to. Also, compilers are required to give error messages when you try to do so. For the same reason, conversion from const char * to char* is deprecated.
In C, char* means a pointer to a character. Strings are an array of characters eliminated by the null character in C.
const int* const is a constant pointer to constant integer This means that the variable being declared is a constant pointer pointing to a constant integer. Effectively, this implies that a constant pointer is pointing to a constant value.
From the C++ Super-FAQ:
Read the pointer declarations right-to-left.
const X* p
means "p
points to anX
that isconst
": theX
object can't be changed viap
.X* const p
means "p
is aconst
pointer to anX
that isnon-const
": you can't change the pointerp
itself, but you can change theX
object viap
.const X* const p
means "p is aconst
pointer to anX
that isconst
": you can't change the pointerp
itself, nor can you change theX
object viap
.And, oh yea, did I mention to read your pointer declarations right-to-left?
const char * const *
is the same as char const * const *
: a (non-const) pointer to a const pointer to a const char.
const char *
is the same as char const *
: a (non-const) pointer to a const char.
const char * *
is the same as char const * *
: a (non-const) pointer to a (non-const) pointer to a const char.
No, it's not the same as const char *argv[]
. The const
prohibits modifications of the dereferenced value at the particular level of dereferencing:
**argv = x; // not allowed because of the first const *argv = y; // not allowed because of the second const argv = z; // allowed because no const appears right next to the argv identifier
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With