Asignando optarg a un int en C

Estoy tratando de asignar un valor optarg a un int, pero el compilador me da la siguiente advertencia:

warning: assignment makes integer from pointer without a cast [enabled by default]

He intentado lanzar optarg como int antes de la asignación

n = (int) optarg;

pero aún así obtener una advertencia:

warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

No estoy seguro de lo que se debe hacer antes de poder simplemente asignar el optarg a un entero y luego imprimirlo (por ahora).

int main (int argc, char *argv[])
{
  char c;
  int n;

  while ((c = getopt(argc, argv, "m:")) != -1) {
    switch (c) {
    case 'm':
      n = optarg;
      break;
    }
  }

  printf("%d\n", n);

  return 0;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta