Estudiantes, miren cuántos de estos 8 acertijos en lenguaje C pueden responder correctamente
Cuántas respuestas correctas a 8 acertijos de lenguaje en lenguaje C
1. Es posible que el siguiente programa no genere "hello-std-out".
Respuesta de referencia: stdout y stderr son descriptores de dispositivo diferentes. stdout es un dispositivo de bloque, stderr no lo es. Para dispositivos de bloque, solo se ingresará cuando se produzcan las siguientes condiciones: se encuentra un retorno de carro; se llama al vaciado del búfer; Pero stderr no lo hace.
2. El siguiente programa parece normal y utiliza una expresión de coma para la inicialización. Lamentablemente, existe un problema con este procedimiento. ¿Sabes por qué?
Respuesta de referencia: Este programa obtendrá un error de compilación (error de sintaxis). La expresión de coma es correcta, pero durante la inicialización y la declaración de variables, la coma no es el significado de la expresión de coma. Es necesario distinguir este punto. Para modificar el programa anterior, debe agregar corchetes: "int a = (1,2);".
3. ¿Qué tipo de resultado producirá el siguiente programa?
Respuesta de referencia: El programa generará 4321. ¿Sabe por qué? Para saber por qué, necesita saber el resultado. de printf ¿Cuál es el valor? El valor de retorno de printf es el número de caracteres generados.
4. ¿Qué generará el siguiente programa?
Respuesta de referencia: El resultado del programa: "0121095237632". La razón es: el número de punto flotante es de 4 bytes, 12.5f convertido a binario es:
01000001010010000000000000000000, hexadecimal: 0x41480000, decimal: 1095237632. Por lo tanto, creo que todos saben por qué son la segunda y la tercera salida.
5. A continuación, veamos un problema de compilación cruzada. ¿Se pueden compilar y pasar los dos archivos siguientes? Si es así, ¿cuál es el resultado?
Respuesta de referencia: este programa. Se compila correctamente, pero se produce un error al ejecutar. ¿Por qué? La razón es que declarar externamente una matriz con extern int *arr en otro archivo no obtiene el valor esperado real porque sus tipos no coinciden. Entonces el puntero en realidad no apunta a esa matriz.
6. ¿Cuáles son los peligros potenciales del siguiente programa?
Respuesta de referencia: Esta pregunta es muy simple. El problema potencial con este programa es que si el usuario ingresa más de 80 caracteres, habrá un problema de matriz fuera de límites y lo más probable es que su programa falle.
7. ¿Cuál es el resultado del siguiente programa? (Definitivamente no 10)
Respuesta de referencia: El resultado de esta pregunta es 100. ¿Por qué? El problema radica en "y = y/*p;". Originalmente queríamos "y /(*p) Sin embargo, no agregamos espacios ni corchetes, como resultado, "y/*p" "/. *" se interpreta como el comienzo de un comentario. Así que este es también el comienzo de toda la pesadilla.
8. ¿Cuál es el resultado a continuación?
Respuesta de referencia: esta pregunta no es simplemente una prueba de prefijo ++ o anti-fix ++. Esta pregunta prueba principalmente && y | 1 El problema de la evaluación de cortocircuitos.
La llamada evaluación de cortocircuito: para (condición 1 && condición 2), si la "condición 1" es falsa, se ignorará la expresión de la "condición 2". Para (condición 1 condición 2), si la "condición 1" es verdadera, se ignora la expresión de la "condición 2"