Question: I'm trying to understand if there is any difference between:

```
bool String_Init(String *str, char * s, uint32_t len){};

```

and

```
bool String_Init(String *str, char *s, uint32_t len){};

```

Also,

```
const char * String_GetCString(const String * const str){};

```

and

```
const char *String_GetCString(const String * const str){};

```

Thank you!

Answer: 
As explained in more detail [here](http://en.wikipedia.org/wiki/C_data_types), for any type `T`, the expression `T*` means 'pointer to `T`'. It does not matter whether the asterisk is put to the argument name in the function name or to the type name for which the pointer type is referred to. The argument declarations `T* arg` and `T *arg` are identical.
There is no differecne in the code pairs you've shown. They are same.

* `char *s`
* `char * s`
* `char* s`

all are same. *Most of the time* **extra** whitespace(s) is(are) ignored in `c`.

To clear your confusion, in case of 

```
char *s

```

the `*` should be *read* as a part of the data type, it is not a part of the variable name.

IMHO, to avoid confusion , better to write `char * s;`