In C, a string is a sequence of character values including a zero-valued terminator – the string "hello"
is represented as the sequence {'h', 'e', 'l','l', 'o', 0}
.
Strings (including string literals) are stored in arrays of character type:
char str[] = "hello";
Except when it is the operand of the sizeof
or unary &
operators, or is a string literal used to initialize a character array in a declaration (like above), an expression of type “N-element array of T
” will be converted (“decay”) to an expression of type “pointer to T
” and the value of the expression will be the address of the first element of the array.
So if you call a function like
foo( str );
what the function actually receives is a char *
, not an array of char
, so the prototype will be
void foo( char * ); // declaration
void foo( char *str ) { ... } // definition
In the context of a function parameter declaration, T a[N]
and T a[]
are adjusted to T *a
, so you could also write the prototype as
void foo( char str[] )
or
void foo( char str[N] )
but they’ll both be interpreted as
void foo( char *str )
solved How is a string declared as a parameter to a function in c?