Existen varios niveles de abstracciones de representar una nueva línea: el tiempo de ejecución del lenguaje de programación, el editor de texto y el sistema operativo. CR (retorno de carro) y LF (avance de línea) son dos charactores de control que se definen en ASCII. Algunas otras codificaciones de los charadores también pueden definir un carácter de "nueva línea". La tecla Intro en cualquier teclado transmite un significado de "al principio de la siguiente línea". El teclado decide cómo asignar la tecla Intro a su charactor o charactor de control correspondiente. Algunos teclados también diferencian las teclas Intro y Retorno - deje que la tecla Intro sea nueva y la tecla Intro sea el retorno del carro.En un teclado ANSI estándar, solo hay una tecla Intro, que está asignada a un caracter de retorno de carro (13) en ASCII. Así que este es el contenido real que el dispositivo envía al sistema operativo. Sin embargo, diferentes SO deciden interpretar la tecla Enter de forma diferente. Por lo tanto, en el sistema tipo Unix, cualquier retorno de carro se traduce a un operador de alimentación de línea (10 en ASCII) antes de entregarlo al programa que recibe la entrada. Y en Windows, un CR se traduce en dos caracteres: un CR seguido de un LF. Sin embargo, puede configurar el flujo de entrada para que sea el modo raw, en cuyo caso el programa obtiene lo que el teclado realmente envía. Ahora el editor entra en juego. Cuando el editor recibe un CR de stdin en modo raw, sabe que el CR corresponde a la tecla Enter del teclado (supuesto sobre el teclado) y se supone que debe mostrar una nueva línea en la pantalla. En el modo raw, debe llamar a la llamada del sistema de escritura para generar un CR + LF. Si el flujo de salida no está en modo raw, el editor de texto debe emitir la secuencia específica del sistema operativo, como LF en Linux.
Finalmente, el tiempo de ejecución del lenguaje también puede interpretar la nueva línea a su manera. Por ejemplo, el estándar de C dice: Al escribir un archivo en modo de texto, '\ n' se traduce de forma transparente a la secuencia de línea nueva nativa utilizada por el sistema, que puede ser más larga que un carácter. Al leer en modo texto, la secuencia de nueva línea nativa se traduce de nuevo a '\ n'. En el modo binario, no se realiza ninguna traducción, y la representación interna producida por '\ n' se envía directamente. Tenga en cuenta que '\ n' y '\ r' son caracteres específicos del lenguaje que representan LF y CR, respectivamente, que son populares en los lenguajes tipo C. Pero no todos los idiomas tienen que usar esta notación.
Para su segunda pregunta, "\ n" es '\ n' seguido de un terminador '\ 0'. No hay forma de ingresar un '\ 0' desde la consola.
Relacionados: http://stackoverflow.com/questions/1355095/what-is-the-difference-between-r-and-n – Mysticial
C aplica escapes a literales simples y dobles, por lo que "\ n" es ensartar dos caracteres de longitud, primero el código ASCII 10 (\ n en sí) y el segundo - ASCII NUL (terminador nulo). – toriningen
(Espero que no te importe la edición del título, están ahí para que sea más fácil de buscar.) –