Lenguaje C | Serie 1

Se han hecho las siguientes preguntas en el examen GATE CS.

1. Considere las siguientes tres funciones C:

[PI] int * g (void) 
{ 
  int x = 10; 
  return (&x); 
} 
  
[P2] int * g (void) 
{ 
  int * px; 
  *px = 10; 
  return px; 
}
   
[P3] int *g (void) 
{ 
  int *px; 
  px = (int *) malloc (sizeof(int)); 
  *px = 10;
  return px; 
} 

¿Cuál de las tres funciones anteriores es probable que cause problemas con los punteros? (GATE 2001)
(a) Solo P3
(b) Solo P1 y P3
(c) Solo P1 y P2
(d) P1, P2 y P3

Respuesta: (c)
Explicación: En P1, la variable de puntero x es una variable local de g(), y g() devuelve un puntero a esta variable. x puede desaparecer después de que g() haya regresado ya que x existe en la pila. Por lo tanto, &x puede volverse inválido.
En P2, a la variable de puntero px se le asigna un valor sin asignarle memoria.
P3 funciona perfectamente bien. La memoria se asigna a la variable de puntero px mediante malloc(). Entonces, px existe en el montón, su existencia permanecerá en la memoria incluso después del retorno de g() como está en el montón.


2. El valor de j al final de la ejecución del siguiente programa en C. (PUERTA CS 2000)

int incr (int i)
{
   static int count = 0;
   count = count + i;
   return (count);
}
main ()
{
   int i,j;
   for (i = 0; i <=4; i++)
      j = incr(i);
}

(a) 10
(b) 4
(c) 6
(d) 7

Respuesta (a)
Explicación: la cuenta es una variable estática en incr(). La declaración static int count = 0 asignará count a 0 solo en la primera llamada. Otras llamadas a esta función tomarán los valores antiguos de cuenta.
La cuenta será 0 después de la llamada incr(0)
La cuenta será 1 después de la llamada incr(1)
La cuenta será 3 después de la llamada incr(2)
La cuenta será 6 después de la llamada incr(3) La
cuenta será 10 después de la llamada llamar incr(4)


3. Considere la siguiente declaración C

struct { 
    short s [5];
    union { 
         float y; 
         long z; 
    }u; 
} t; 

Suponga que los objetos del tipo short, float y long ocupan 2 bytes, 4 bytes y 8 bytes, respectivamente. El requisito de memoria para la variable t, ignorando las consideraciones de alineación
, es (GATE CS 2000)

(a) 22 bytes
(b) 14 bytes
(c) 18 bytes
(d) 10 bytes

Respuesta: (c)
Explicación: la array corta s[5] ocupará 10 bytes, ya que el tamaño de la corta es de 2 bytes. Dado que u es una unión, la memoria asignada a u será el máximo de float y (4 bytes) y long z (8 bytes). Entonces, el tamaño total será de 18 bytes (10 + 8).


4. El número de tokens en la siguiente instrucción C.

printf("i = %d, &i = %x", i, &i);

es (GATE 2000)
(a) 3
(b) 26
(c) 10
(d) 21

Respuesta (c)
Explicación: En un programa fuente C, el elemento básico reconocido por el compilador es el «token». Un token es un texto de programa fuente que el compilador no descompone en elementos componentes.
Hay 6 tipos de tokens C: identificadores, palabras clave, constantes, operadores, literales de string y otros separadores. Hay un total de 10 tokens en la instrucción printf anterior.


5. Las siguientes declaraciones C

struct node 
{ 
   int i; 
   float j; 
}; 
struct node *s[10] ; 

definir s para ser (GATE CS 2000)

(a) Una array, cada elemento del cual es un puntero a una estructura de tipo Node
(b) Una estructura de 2 campos, siendo cada campo un puntero a una array de 10 elementos
(c) Una estructura de 3 campos: un número entero , un flotador y un arreglo de 10 elementos
(d) Un arreglo, cada elemento del cual es una estructura de tipo Node.

Respuesta: (a)

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *