Salida de programas en C | conjunto 3

Prediga la salida del siguiente programa. 
Pregunta 1 

c

#include <stdio.h>
int main()
{
  printf("%p", main);
  getchar();
  return 0;
}

Salida: Dirección de la función principal. 
Explicación: el nombre de la función es en realidad una variable de puntero a la función e imprime la dirección de la función. La tabla de símbolos se implementa así. 

struct 
{
   char *name;
   int (*funcptr)();
}
symtab[] = {
   "func", func,
   "anotherfunc", anotherfunc,
}; 

Pregunta 2  

c

#include <stdio.h>
int main()
{
   printf("\new_c_question\by");
   printf("\rgeeksforgeeks");
 
   getchar();
   return 0;
}

Salida: geeksforgeeks 
Explicación: First printf imprime «ew_c_questioy». El segundo printf tiene \r, por lo que vuelve al comienzo de la línea y comienza a imprimir caracteres.
Ahora intente imprimir lo siguiente sin usar ninguno de los caracteres de escape. 

new c questions by
geeksforgeeks

Pregunta 3  

c

# include<stdio.h>
# include<stdlib.h>
 
void fun(int *a)
{
    a = (int*)malloc(sizeof(int));
}
 
int main()
{
    int *p;
    fun(p);
    *p = 6;
    printf("%d\n",*p);
    
    getchar();
    return(0);
}

No funciona. Intente reemplazar “int *p;” con “int *p = NULL;” e intentará desreferenciar un puntero nulo.
Esto se debe a que fun() hace una copia del puntero, por lo que cuando se llama a malloc(), está colocando el puntero copiado en la ubicación de la memoria, no p. p apunta a la memoria aleatoria antes y después de la llamada a fun(), y cuando la desreferencia, se bloqueará.
Si desea agregar memoria a un puntero desde una función, debe pasar la dirección del puntero (es decir, doble puntero).
Gracias a John Doe por proporcionar la solución correcta. Para una mejor comprensión, vaya al siguiente enlace: https://stackoverflow.com/questions/1398307/how-can-i-allocate-memory-and-return-it-via-a-pointer-parameter-to-the- llamando
pregunta 4 

c

#include <stdio.h>
int main()
{
    int i;
    i = 1, 2, 3;        
    printf("i = %d\n", i);
 
    getchar();
    return 0;
}

Salida: 1 
El programa anterior imprime 1. La asociatividad del operador de coma es de izquierda a derecha, pero el operador = tiene mayor precedencia que el operador de coma. 
Por lo tanto, el compilador trata la declaración i = 1, 2, 3 como (i = 1), 2, 3.
Ahora debería ser fácil saber la salida del programa a continuación.

c

#include <stdio.h>
int main()
{
    int i;
    i = (1, 2, 3);        
    printf("i  = %d\n", i);
 
    getchar();
     return 0;
}

Pregunta 5 

c

#include <stdio.h>
int main()
{
    int first = 50, second = 60, third;
    third = first /* Will this comment work? */ + second;
    printf("%d /* And this? */ \n", third);
      
    getchar();
    return 0;
}

Salida: 110 /* ¿Y esto? */ 
Explicación: el compilador elimina todo entre «/*» y «*/» si no están presentes entre comillas dobles («»).

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 *