Разница между возвратом 1, возвратом 0, возвратом -1 и выходом?

Например, рассмотрим следующий код:

int main(int argc,char *argv[])
{
   int *p,*q;
   p = (int *)malloc(sizeof(int)*10);
   q = (int *)malloc(sizeof(int)*10);
   if (p == 0)
{
    printf("ERROR: Out of memory\n");
        return 1;
}


   if (q == 0)
{
    printf("ERROR: Out of memory\n");
        exit(0);
}

   return 0;
}

Что значитreturn 0, return 1, exit(0) делать в вышеуказанной программе?exit(0) выйдет из общей программы, и управление выйдет из цикла, но что произойдет в случаеreturn 0, return 1, return -1.