The * operator in C (and I presume similarly in Objective-C, though I have never used that latter language) gets the contents of the pointer. If you write
int *i; you say, "i is a pointer to an int." A lot of people recommend you put a "P" or "Ptr" or similar as part of the variable name, to remind yourself it is a pointer.
Try that
campbell@xxxxxx-laptop:~/CPrograms$ pointer 123 Campbell
You can see that memory space . . .
Note that what you pass is a pointer to a pointer (usually called a handle) called argv. That is actually an array of arrays of C-type
chars, so if you look in argv + 1 you get a pointer to its second element (a string like "123 ") which actually has a null character ('\0') where I put the space. The atoi function reads that String until it reaches the null character and parses it to an
int. You can see the location that int is put in, and also its contents. The pointer i is the location in memory and *i is the contents of that memory, in this case 123.
You can get the location of the second string entered with the * operator like this *(argv + 2). [Note that *argv points to the 0-th String which is "pointer ".] So the contents of that memory location is where you find the first character of that String. In the case of "Campbell" it occupies 9 locations, 8 letters and the null. If you use the %s tag, it prints all the characters it finds until it reaches the null. Note you can turn it back and forth between int and char * (pointer to char) by casting. If you get a char from *((char *)j) you can print it out as 'C'.
In the case of your isbn variable, it is a pointer to
char or String or similar. If you put 0123456789 in, then you get a pointer to the location of the first '0', ie its memory location. You want to return that memory location. If you return *isbn, then you return 0x30 (=48 = ASCII value for '0' character), which is not what you want.
I hope this makes some sort of sense, and good luck with it.