Blog
102 Preguntas de Entrevista lenguaje C
- Publicado por: Rafael Fernandez
- Categoría: Blog
A continuación te mostramos una serie de preguntas de entrevista de programación en C. Estas preguntas han sido redactadas para que te familiarices con el tipo de preguntas que pueden realizarte durante una entrevista de C. Según nuestra experiencia, estas preguntas te van a servir de mucho tanto para la entrevista como para familiarizarte más con los conceptos básicos de C.
Es una variable que puede tener la dirección de otra variable de puntero. Se refiere dos veces para apuntar a los datos que contiene la variable de puntero designada.
Ejemplo:
int x = 5, *p=&x, **q=&p;
Por lo tanto, se puede acceder a 'x' mediante **q.
Ambos asignan memoria desde el área de acopio/memoria dinámica. Por defecto calloc carga la memoria asignada con 0's.
Para definir cada variable local. En la siguiente función, las variables `i' y `j' son variables automáticas.
void f() { int i; auto int j; }
NOTA: Una variable global no puede ser una variable automática.
La rotura solo aparece en el control de bucle y la instrucción de conmutación de cambio. El propósito de la rotura es sacar el control de dichos bloques.
Sintaxis para el bucle.
for(expression-1;expression-2;expression-3) { //aqui van las declaraciones }
Cuando el control alcanza la expresión-1 se ejecuta primero. Luego, después de la expresión-2, pasa a ser evaluada, y si la expresión-2 evalúa disímil de cero 'conjunto de sentencias' y se ejecuta la expresión-3, seguida de la expresión-2.
Al incluir un archivo de origen con < >, el compilador busca el archivo de encabezado en particular, sólo con la ruta de inclusión incorporada. Pero, si se incluye un archivo de encabezado en " ", el compilador buscara primero el archivo del encabezado en particular dentro del directorio de trabajo actual, si no está en la ruta de inclusión incluida.
Obtener el complemento de los dos del mismo entero positivo. Ej: 1011 (-5)
Paso 1 - Un cumplido de 5: 1010
Paso-2 - Sumar 1 a arriba, dando 1011, que es -5
Una variable local estática es la que retiene su valor entre la llamada de función y el valor por defecto, es 0. La siguiente función imprimirá 1 2 3 si es llamada tres veces.
void f() { static int i; ++i; printf(“%d “,i); }
Si una variable global es estática, su visibilidad estará limitada al mismo código fuente.
Es el puntero que no apunta a nada.
Ejemplo:
char *p=NULL;
Es usado para resolver el alcance del símbolo global.
Ejemplo:
main() { extern int i; Printf(“%d”,i); } int i = 20;
Su propósito es Imprimir la salida formateada en la matriz de caracteres.
La dirección de inicio del array se llama como la dirección base del mismo.
Una variable debe ser declarada usando el especificador de almacenamiento de registro, cuando la variable es usada con más frecuencia, entonces puede ser que el compilador le da registro a la CPU para su almacenamiento y para acelerar la búsqueda de la variable.
S++, ya que se trata de una instrucción de máquina individual (INC) interna.
Es el puntero que al inicio contiene una dirección válida, pero más tarde libera la dirección retenida. Entonces recibe el nombre de puntero colgante.
Es usada para alias el tipo existente y para simplificar la compleja declaración del tipo.
La expresión que está a la derecha del operador de asignación se denomina rvalue. El rvalue se asignara al Ivalue, que aparece a la izquierda del operador de asignación. El valor de I se debe designar a una variable y no a una constante.
Los parámetros reales son los enviados a la función al final de la llamada, y los formales son los que reciben la definición de la función.
Sí, puede ser compilado, pero no puede ser ejecutado, ya que la ejecución requiere de la definición de la función main().
Si no sabemos qué tipo de dirección de memoria va a tener la variable del puntero, se declara nulo el puntero para esa variable.
Una variable automática se almacena en la memoria de la pila.
Es una estructura que contiene un elemento de otra estructura tal y como su miembro lo denomina.
La declaración da el valor al tipo de variable, y la definición asocia el valor a la variable.
Es una estructura que contiene la misma variable de puntero de estructura, que su elemento. Es por ello que se le denomina autorreferencial.
No, porque el archivo de encabezado sólo declara la función. La definición está en la biblioteca la cual está enlazada por el enlazador.
Un enfoque modular consiste en dividir el programa en sub-programas, (módulos/función) para lograr la tarea dada. La definición de funciones genéricas ofrece posibilidad de reutilizar las funciones, como las de biblioteca incorporadas.
Un token es una palabra clave,identificador, un símbolo, una constante, o una literal de cadena, un programa CA contiene varios token.
El preprocesador es una directiva para que el compilador efectúe ciertas cosas antes de comenzar el proceso de compilación real.
Usando la barra invertida o slash.
Sí, si no aparece como último caso y si no se quiere que el control fluya al siguiente caso después del defecto si es que lo hay.
Si la variable de estructura/unión es una variable pointer (de puntero), para entrar a los elementos de estructura/unión se usa el operador de flecha.
Se pueden crear estructuras de datos de enteros de distinto tamaños que no sean estándar mediante el uso de los campos de bits. Estas estructuras van a automáticamente ajustarse en tamaño según los diferentes tamaños de 'enteros' de la maquina.
Son los argumentos que se pasan a la función main() durante la ejecución del programa. Los parámetros son cadenas que se mantienen en el segundo argumento (abajo en args) de la función, que es una matriz de punteros (pointers) de caracteres. El primer argumento representa el conteo de argumentos (abajo en count) se actualiza de forma automática por el sistema operativo.
main( int count, char *args[]) { }
- Llamada por valor (value): se envían sólo valores a la función como parámetros. Se elige esta opción si no se quiere que los parámetros reales sean modificados con parámetros formales, sino que sólo se usen.
- Llamada por referencia: Se envía la dirección de los parámetros reales en lugar de los valores, esta opción es elegida si se quiere que los parámetros reales se cambien con parámetros formales.
Comparar dos cadenas ignorando el caso.
Se abre un archivo para leer y escribir. Si un archivo no existe, se debe crear uno, pero, si el archivo existe, se sobrescribirá.
No se puede utilizar en constantes, ni en variables que se declaran, usando la clase de almacenamiento de registro.
No. Sólo es una estructura definida en stdio.h.
Un error, porque no es válido que uno de los operandos del operador del módulo, (%) sea un número real.
Sólo hay uno y es un operador condicional (? :).
goto.
Un puntero (pointer) a una función, se le llama al puntero que mantiene la referencia de la función. En general se declara lo siguiente.
T (*fun_ptr) (T1,T2…); Where T is any date type.
Una vez que fun_ptr refiere una función, la misma puede ser solicitada usando el puntero de la siguiente manera.
fun_ptr(); [Or] (*fun_ptr)();
El operador de coma, se puede usar para separar dos o más expresiones.
Ejemplo:
printf(“hi”) , printf(“Hello”);
Es una declaración nula. Es la sentencia que no puede ser ejecutable como ; (punto y coma).
Ejemplo:
int count = 0; while( ++count<=10 ) ;
Arriba no hace nada 10 veces.
Es la definición de una función prefijada con una palabra clave. Se convierte una función en estática, si se llama sólo dentro del mismo código fuente.
Se usa la barra oblicua hacia atrás (\).
Ejemplo:
#define MESSAGE "Hi, \ Welcome to C"
Las elipses.
Ejemplo:
void f(int k,…) {}
char *s1 = "hello",*s2 = "welcome"; strcat(s1,s2);
s1 apunta a una constante de cadena y no puede ser modificada.
realloc().
El Array es una colección de elementos de datos parecidos bajo un nombre común.
Las enumeraciones son una lista de constantes enteras con nombre. Los numeradores se identifican con la palabra clave 'enum'.
fseek()
Se define como variable a un almacenamiento de nombres.
Dennis M. Ritchie.
B
Instituto Nacional Americano de Estándares. (American National Standards Institute.)
sizeof
Sí, pero con pérdida de la parte fraccionaria.
No, porque contiene dígitos octales que son inválidos.
Devuelve un valor 1 si la relación entre las expresiones es verdadera, o bien 0.
Si los dos bits correspondientes son iguales, se obtiene 0 o 1.
Es el bucle que se ejecuta repetidamente, como la expresión de bucle siempre evalúa a verdadero.
Ejemplo:
while(0 == 0) {}
Si, las variables que pertenecen a un ámbito distinto, pueden tener el mismo nombre que en el siguiente fragmento de código.
Ejemplo:
int var; void f() { int var; } main() { int var; }
De variables locales un 'valor de basura' (garbage value) y variables globales un valor 0 por defecto.
Las operaciones permitidas en los punteros son dos:
- Comparación ii) Adición/Sustracción (excluyendo los punteros vacíos)
Es la cuenta del carácter quitando el carácter'\0'.
strcat() forman la cabecera string.h
Operador de flecha (arrow) (->).
stdin una variable de puntero (pointer) que esta abierta por defecto para un dispositivo de entrada estándar.
fclose().
Se usa para anular una definición de macro existente.
Se define una estructura como una colección de datos heterogéneos.
El Typecasting o encasillamiento es la forma de convertir una variable/constante de un tipo a otro tipo.
Una función que se llama a si misma se le llama recursión.
free().
Si hay un fallo, fopen() devuelve NULL, en caso contrario se abre con éxito.
El archivo ejecutable se genera a raíz de Linker.
Idealmente son 32 caracteres.
La declaración de una función es optativa, si la misma se llama después de ser definida.
Al momento del preprocesamiento.
No, solamente puede ser devuelto un valor al caller.
Es un puntero que no se puede alterar y por ello, no va a tener otra direccion despues de que tenga una.
Void
Sí.
No. Se necesita comparar cada elemento por elemento de las variables de estructura.
Strstr()
Son palabras clave no estándar. Un puntero cercano puede accesar sólo a 2^15 de espacio de memoria y uno lejano puede accesar a 2^32 de espacio de memoria. Las dos palabras clave son específicas de la implementación y no son estándar.
No, se puede.
el lazo o ciclo for.
Es un valor que no se puede modificar. Estas variables son declaradas con la palabra clave const.
No, es necesario usar la palabra clave 'struct' y el nombre de la etiqueta.
Sí pero posiblemente el programa no haga nada.
Sí, cualquier función definida por el usuario puede llamar a otra función.
Brain Kernighan