Pointer version of itoa Rewrite appropiate programs from earlier chapters and exercises with pointers instead of array indexing. Good posibilities include getline(Chapter 1 and 4), atoi, itoa, and their variants(Chapters 2, 3, and 4), reverse(Chapter 3), and strindex and getop(Chapter 4)


Here is my solution: 

static char *hidden(int n, char *s) {
    char *p;

    if(n / 10) {
        p = hidden(n / 10, s);
    }
    else {
        p = s;

    }
    *p++ = n % 10 + '0';
    *p = '\0';

    return p;
}

char *itoa(int n, char *s) {
    if(n &lt; 0) {
        *s = '-';
        hidden(-n, s + 1);
    }
    else {
        hidden(n, s);
    }

    return s; /* pointer to first char of s*/
}


itoa is a wrapper for the function hidden. The function hidden returns a pointer to the next free slot in the array s. At the deepest level of recursion it returns a pointer to the first element (the else branch) of the array.
The standard version of itoa takes a parameter named base (which you have assumed is 10).

You probably don't need a second hidden function; this would do instead:

if (n &lt; 0)
{
    *s++ = '-';
    n = -n;
}
// ... itoa implementation continues here ...


Recursing is clever; you could also probably do it with two loops instead (untested code ahead):

i = 1;
while ((i * 10) &lt;= n)
    i *= 10;
for (; i != 0; i /= 10)
{
    int x = n / i;
    *p++ = (char)(x % 10 + '0');
    n -= (x * i);
}
assert(n == 0);