Salida de programas en C | conjunto 9

Prediga la salida de los siguientes programas. 
Pregunta 1 
 

c

int main()
{
 int c=5;
 printf("%d\n%d\n%d", c, c <<= 2, c >>= 2);
 getchar();
}

Producción:

 Compiler dependent 

El orden de evaluación de los parámetros no está definido por el estándar C y depende de la implementación del compilador. Nunca es seguro depender del orden de evaluación de los parámetros. Por ejemplo, una llamada de función como la anterior puede muy bien comportarse de manera diferente de un compilador a otro.

Referencias: 
http://gcc.gnu.org/onlinedocs/gcc/Non_002dbugs.html

Pregunta 2 

c

int main()
{
    char arr[] = {1, 2, 3};
    char *p = arr;
    if(&p == (char*) &arr)
     printf("Same");
    else
     printf("Not same");
    getchar();
}   

Producción: 

Not Same 

&arr es un alias para &arr[0] y devuelve la dirección del primer elemento de la array, pero &p devuelve la dirección del puntero p. 

Ahora prueba el siguiente programa 
 

c

int main()
{
    char arr[] = {1, 2, 3};
    char *p = arr;
    if(p == (char*) &arr)
     printf("Same");
    else
     printf("Not same");
    getchar();
}   

Pregunta 3

c

int main()
{
    char arr[] = {1, 2, 3};
    char *p = arr;
    printf(" %d ", sizeof(p));
    printf(" %d ", sizeof(arr));
    getchar();
}   

Producción: 

4 3 

sizeof(arr) devuelve la cantidad de memoria utilizada por todos los elementos de la array 
y sizeof(p) devuelve la cantidad de memoria utilizada por la propia variable de puntero.

Pregunta 4 

c

int x = 0;
int f()
{
   return x;
}
 
int g()
{
   int x = 1;
   return f();
}
 
int main()
{
  printf("%d", g());
  printf("\n");
  getchar();
} 

Producción:

En C, las variables siempre tienen un alcance estático (o léxico). El enlace de x dentro de f() a la variable global x se define en tiempo de compilación y no depende de quién lo llame. Por lo tanto, la salida para el programa anterior será 0.
En una nota al margen, Perl admite tanto el alcance dinámico como el estático. La palabra clave de Perl «my» define una variable local de ámbito estático, mientras que la palabra clave «local» define una variable local de ámbito dinámico. Entonces, en Perl, un programa similar (ver más abajo) imprimirá 1. 
 

perl

$x = 0;
sub f
{
   return $x;
}
sub g
{
   local $x = 1; return f();
}
print g()."\n";

Referencia: 
http://en.wikipedia.org/wiki/Scope_%28programming%29
Escriba comentarios si encuentra alguna de las respuestas/explicaciones anteriores incorrectas.
 

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 *