C ++ algunas preguntas comunes de la entrevista --- actualización continua

1. ¿Cuál es la diferencia entre declaración de variable y definición?

La definición de la variable asigna la dirección y el espacio de almacenamiento para la variable, la declaración de la variable no asigna la dirección. Una variable se puede declarar en varios lugares, pero solo se puede definir en un lugar. Al mismo tiempo, agregue la declaración de la variable modificada externa, indicando que esta variable se definirá fuera del archivo o en la parte posterior del archivo.
Descripción: muchas veces una variable simplemente se declara que no asignará espacio de memoria y no se inicializará hasta que se use específicamente, como las variables externas.

int main()
{
extern int A;
//这是个声明而不是定义,声明A是一个已经定义了的外部变量
//注意:声明外部变量时可以把变量类型去掉如:extern A;
dosth(); //执行函数
}
int A; //是定义,定义了A为整型的外部变量

2. Describe brevemente la función de #ifdef, #else, #endif e ifndef

En el programa, puede usar #ifdef y #endif para definir especialmente el código de un determinado módulo para proporcionar esta función a usuarios específicos. Los usuarios pueden bloquearlos cuando no los necesiten.

#ifdef MATH
#include "math.c"
#endif

Al mismo tiempo, cuando se trata de compilación de hardware debajo de la ventana, puede usar este tipo de compilación para omitir el hardware y compilar directamente para obtener el resultado esperado.
Nota: aunque la instrucción if se puede usar directamente sin el comando de compilación condicional para cumplir con los requisitos, el programa de destino es largo y el tiempo de ejecución es largo. Cuando se realiza la compilación condicional, las declaraciones compiladas se pueden reducir, reduciendo así la duración del programa de destino y el tiempo de ejecución. .

3. Escriba una declaración if para comparar int, bool, float, puntero variable y "valor cero"

//int与零值比较
if ( n == 0 )
if ( n != 0 )
//bool与零值比较
if (flag) // 表示flag为真
if (!flag) // 表示flag为假
//float与零值比较
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON) //其中EPSINON是允许的误差(即精度)。
//指针变量与零值比较
if (p == NULL)
if (p != NULL)

4. ¿Se puede asignar la estructura directamente?

Se puede inicializar directamente cuando se declara y también se pueden asignar directamente diferentes objetos de la misma estructura, pero tenga cuidado cuando la estructura contiene punteros "miembros".
Nota: cuando hay varios punteros a la misma memoria, liberar esta memoria mediante un puntero puede provocar operaciones ilegales de otros punteros. Por lo tanto, debe asegurarse de que otros punteros ya no utilicen este espacio de memoria antes de liberar

5. La diferencia entre sizeof y strlen

sizeof es un operador, strlen es
el parámetro de la función de biblioteca sizeof, que puede ser un tipo de datos o una variable. Y strlen solo puede usar una cadena que termine con '\ 0' como parámetro. El
compilador calcula el resultado de sizeof en tiempo de compilación, mientras que la función strlen debe calcularse en tiempo de ejecución, y el tipo de datos calculado por sizeof ocupa el tamaño de la memoria. Y strlen calcula la longitud real de la cadena
ya que el parámetro de sizeof no degenera, y degenera en un puntero cuando se pasa a strlen.

6. ¿Cuál es la diferencia entre la palabra clave estática del lenguaje c y la palabra clave estática de C ++?

En c, la palabra clave estática se usa para modificar variables estáticas locales y variables y funciones estáticas externas. Además de las funciones anteriores en C ++, también se usa para definir variables y funciones de miembros de clase. Es decir, miembros estáticos y funciones de miembros estáticos.
La memoria estática de atención y las características globales en la programación pueden permitir que las funciones llamadas en diferentes momentos se comuniquen y transfieran información, mientras que los miembros estáticos de C ++ se pueden realizar entre múltiples instancias de objetos. Comunicación

7. La diferencia entre Malloc en lenguaje C y la nueva eliminación en C ++

New y delete son operadores y se pueden sobrecargar.
Malloc solo se puede usar en C ++ . Free es una función que se puede sobrescribir. Tanto C como C ++ pueden usar
new para llamar al constructor del objeto. La eliminación correspondiente llama al destructor.
malloc solo asigna memoria, free solo recupera memoria y no realiza funciones de construcción y destrucción.
Nuevos y eliminados punteros de retorno de un determinado tipo de datos. Malloc y punteros de retorno libre void.
Nota: el espacio de memoria aplicado por malloc debe liberarse con free. El espacio de memoria solicitado por new debe liberarse con eliminar en lugar de mezclar

8. Escriba una macro "estándar" MIN

# d e f i n e m i n ( a , b ) ( ( a ) < = ( b ) ? ( a ) : ( b ) )

9. La diferencia entre ++ i e i ++

++ i incrementa 1 y luego devuelve
i ++ devuelve 1 primero, luego incrementa 1

10. ¿Cuál es el papel de los volátiles

Registros de hardware de dispositivos paralelos, como registros de estado. Una
variable no automática a la que accede una subrutina de servicio de interrupción
. Variables compartidas por varias tareas entre varios subprocesos.
Nota: aunque el volátil se usa más en aplicaciones integradas, hay más software en el lado de la PC. En los hilos, las variables críticas modificadas volátiles también son muy prácticas

11. ¿Puede un parámetro ser constante y volátil?

La respuesta es sí. Usar const y volatile para modificar la variable al mismo tiempo significa que la variable es de solo lectura dentro del programa y no se puede cambiar. Solo se puede cambiar bajo cambios externos, y el compilador no optimizará esta variable. Cada vez que use esta variable, debe ir con cuidado a la memoria para leer el valor de esta variable, en lugar de ir al registro para leer su copia de seguridad.
Nota: aquí debemos prestar atención al significado de const. Const simplemente no permite que el código del programa cambie una determinada variable y desempeña un papel durante la compilación. En realidad, no prohíbe la lectura y escritura de una determinada sección de la memoria.

12. ¿Cuál es la diferencia entre ay & a?

& a significa cuando la dirección de la variable a
tiene diferentes significados en diferentes lugares.
En la declaración de declaración, a solo muestra que a es una variable, int a está
en otras declaraciones, cuando no hay operando delante de ay a es un puntero, a representa los datos almacenados en la dirección apuntada por el puntero a, como b = * a

13. Compile un programa de bucle sin fin con c

while(1)
{ }

Nota: muchas formas pueden lograr la misma función, pero los diferentes métodos tienen diferente ocupación de tiempo y espacio, especialmente para la lectura y el software integrado, la velocidad del procesador es relativamente lenta y el espacio de almacenamiento es pequeño, así que elija una variedad de ventajas de tiempo y espacio La primera consideración del método.

14. ¿Cuál es la diferencia entre variables globales y variables locales? ¿Cómo se logra? ¿Cómo lo saben el sistema operativo y el compilador?

Todas las variables son variables a las que puede acceder todo el programa. Cualquiera puede acceder a ellas. El tiempo de vida de todo el programa es de ejecución a fin, se libera la memoria ocupada al final del programa.
Existen variables locales en el módulo (subrutina, función), y solo se ubica el módulo. Se puede acceder, no se puede acceder a otros módulos directamente. Después de llamar al módulo, las variables locales desaparecen y se libera la memoria ocupada. El
sistema operativo y el compilador pueden conocer la ubicación de la asignación de memoria. Las variables globales se asignan en el segmento de datos globales y en el programa. Se registra cuando se ejecuta y las variables locales se asignan en la pila.

15. Describa brevemente la asignación de memoria de la compilación del programa C y C ++

Asignación desde el área de almacenamiento estático: la memoria se asigna cuando se compila el programa, y ​​esta memoria existe durante todo el período de ejecución del programa. Es rápido y no es fácil cometer errores, porque hay un sistema que limpiará las secuelas. Por ejemplo, las variables globales, variables estáticas, cadenas de constantes, etc.
se asignan en la pila, cuando se ejecuta la función, las unidades de almacenamiento de las variables locales en la función se crean en la pila y estas unidades de almacenamiento se liberan automáticamente cuando se ejecuta la función.
Asignación en la asignación de memoria dinámica de pila. Cuando el programa se está ejecutando, use malloc o new para solicitar cualquier tamaño de memoria, y el programador es responsable de cuándo usar free y delete para liberar la memoria. El programador determina la vida útil de la memoria dinámica. Si se asigna espacio en el montón, es responsabilidad recuperarlo; de lo contrario, el programa en ejecución tendrá una pérdida de memoria. La asignación y liberación frecuentes de diferentes tamaños de espacio de montón producirán fragmentos de montón

Supongo que te gusta

Origin blog.51cto.com/13475106/2586629
Recomendado
Clasificación