Can someone please help me understand the code in bold below?

I can't understand what it's doing...

Code:

#include <ctype.h>
#include <stdio.h>
int getch(void);
void ungetch(int);
/* getint: get next integer from input into *pn */
int getint(int *pn)
{
int c, sign;
while (isspace(c = getch()));/* skip white space */
if (!isdigit(c) && c != EOF && c != '+' && c != '-') {
ungetch(c); /* it's not a number */
return 0;
}
sign = (c == '-') ? -1 : 1;
if (c == '+' || c == '-')
c = getch();
** for (*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0'); // This is what I don't get...
*pn *= sign;
**
if (c != EOF)
ungetch(c);
return c;
}