Question: If we have a `char *hello` - and the string is `"hello"`

and i do 

```
char *ptr;
ptr = hello;

```

then ptr will be pointing at `'h'`, correct?

Now I have just done an assignmnet in this and completed it using the following terms

if i wanted to move the pointer to the next chatachter i would just do `ptr++`. If i wanted to use the value of the pointer for some check, i would use `if(*ptr == '\0')...`

When i was doing the assignmnets our teacher gave us some pre built methods, and they used stuff like 

```
*string++ = *s++;

```

ok, so why would we want to do `*string` (which gets a value) - and combine it with `++`

I hope i make sense in explaining what is not clear. Its just I managed to do the whole assignment with ptr++ to move to next element or \*ptr to check its value

Answer: 
The idiom `*s++` means "take the value pointed to, and switch to the next one".
This way you can do your check operations in a loop. The assignment `*p++ = *q++` copies the value of `*q` to the place pointed by `p`, and shifts both `p` and `q` to the next place, so the next time you execute `*p++ = *q++` the next character will be copied behind the first one. And so on.
Just a quick addition to Mark Byers' answer, who correctly points out the postfix increment ("a++") as opposed to the prefix increment ("++a").

You probably want to have a look at the [C operator precedence](http://isthe.com/chongo/tech/comp/c/c-precedence.html) for the order in which operators are handled in an expression.

You can always force the precedence you want by using parentheses: (a + b) \* c != a + b \* c.