Reputation: 321
When I'm passing a string to the function sometimes I use
char *functionname(char *name[256])
and sometimes I use it without pointers (for example:
char functionname(char name[256])
My question is,when do I need to use pointers ? Often I write programs without pointers and it works,but sometimes it doesn't.
Upvotes: 30
Views: 193811
Reputation: 27233
The accepted convention of passing C-strings to functions is to use a pointer:
void function(char* name)
When the function modifies the string you should also pass in the length:
void function(char* name, size_t name_length)
Your first example:
char *functionname(char *name[256])
passes an array of pointers to strings which is not what you need at all.
Your second example:
char functionname(char name[256])
passes an array of chars. The size of the array here doesn't matter and the parameter will decay to a pointer anyway, so this is equivalent to:
char functionname(char *name)
See also this question for more details on array arguments in C.
Upvotes: 60
Reputation: 18218
Assuming that you meant to write
char *functionname(char *string[256])
Here you are declaring a function that takes an array of 256 pointers to char
as argument and returns a pointer to char. Here, on the other hand,
char functionname(char string[256])
You are declaring a function that takes an array of 256 char
s as argument and returns a char
.
In other words the first function takes an array of strings and returns a string, while the second takes a string and returns a character.
Upvotes: 3
Reputation: 414
An array is a pointer. It points to the start of a sequence of "objects".
If we do this: ìnt arr[10];
, then arr
is a pointer to a memory location, from which ten integers follow. They are uninitialised, but the memory is allocated. It is exactly the same as doing int *arr = new int[10];
.
Upvotes: 0