Prediga la salida de los siguientes programas en C.
Pregunta 1
#include<stdio.h> #define R 10 #define C 20 int main() { int (*p)[R][C]; printf("%d", sizeof(*p)); getchar(); return 0; }
Salida: 10*20*sizeof(int) que es “800” para compiladores con tamaño entero de 4 bytes.
El puntero p está desreferenciado, por lo tanto, produce el tipo del objeto. En el presente caso, es una array de arrays de enteros. Entonces, imprime R*C*sizeof(int).
Gracias a Venki por sugerir esta solución.
Pregunta 2
#include<stdio.h> #define f(g,g2) g##g2 int main() { int var12 = 100; printf("%d", f(var,12)); getchar(); return 0; }
Salida: 100
El operador ## se llama » Token-Pasting» o Operador «Fusionar» . Combina dos tokens en un token. Entonces, después del preprocesamiento , la función principal se convierte en la siguiente e imprime 100.
int main() { int var12 = 100; printf("%d", var12); getchar(); return 0; }
Pregunta 3
#include<stdio.h> int main() { unsigned int x = -1; int y = ~0; if(x == y) printf("same"); else printf("not same"); printf("\n x is %u, y is %u", x, y); getchar(); return 0; }
Salida: «mismo x es MAXUINT, y es MAXUINT» Donde MAXUINT es el valor máximo posible para un entero sin signo.
-1 y ~0 esencialmente tienen el mismo patrón de bits, por lo tanto, x e y deben ser iguales. En la comparación, y se promociona a sin firmar y se compara con x. El resultado es «igual». Sin embargo, cuando se interpretan como firmados y sin firmar, sus valores numéricos diferirán. x es MAXUNIT y y es -1. Como también tenemos %u para y, la salida será MAXUNIT y MAXUNIT.
Gracias a Venki por la explicación.
Escriba comentarios si encuentra que alguna de las respuestas/explicaciones es incorrecta, o si desea compartir más información sobre los temas discutidos anteriormente.
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