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