Prerrequisito: Punteros en C
Pregunta 1: ¿Cuál será el resultado del siguiente programa?
#include "stdio.h" int main() { char a[] = { 'A', 'B', 'C', 'D' }; char* ppp = &a[0]; *ppp++; // Line 1 printf("%c %c ", *++ppp, --*ppp); // Line 2 }
OPCIONES:
a)CB
b)BA
c)BC
d)CA
OUTPUT: (d) C A
Explicación:
Línea 1: Ahora, ppp apunta a la siguiente ubicación de memoria, es decir, índice 1 de la array de caracteres.
Línea 2: En primer lugar, se ejecuta –*ppp= –(*ppp) y, por lo tanto, el valor ‘B’ (que está en la posición del índice 1 de la array char[]) se reduce en 1 (es decir, se convierte en ‘A’ ) y se envía a imprimir. Luego se ejecuta *++ppp= *(++ppp) que inicialmente incrementa el puntero al siguiente elemento de la array e imprime el valor en ese número de índice 2 que es ‘C’. Aunque –*ppp se ejecuta primero en comparación con *++ppp, la pantalla se mostrará en el orden mencionado en la función printf() en la línea 2. Por lo tanto, obtenemos una salida como C A.
Pregunta 2: ¿Cuál será el resultado del siguiente programa?
#include <stdio.h> int main() { int* ptr; *ptr = 5; printf("%d", *ptr); return 0; }
OPCIONES:
a) error de compilación
b) error de tiempo de ejecución
c) 5
d) error del enlazador
OUTPUT: (b) Runtime error
Explicación: La variable de puntero (*ptr) no se puede inicializar.
Pregunta 3: ¿Cuál será el resultado del siguiente programa?
#include <stdio.h> int main() { int a = 36; int* ptr; ptr = &a; printf("%u %u", *&ptr, &*ptr); return 0; }
OPCIONES:
a) Dirección Valor
b) Dirección Valor
c) Dirección Dirección
d) Error de compilación
OUTPUT: (c)Address Address
Explicación: & y * se cancelaron entre sí y muestran la dirección almacenada en una variable de puntero ptr, es decir, la dirección de a.
Pregunta 4: ¿Cuál será el resultado del siguiente programa?
#include <stdio.h> int main() { int num = 10; printf("num = %d addresss of num = %u", num, &num); num++; printf("\n num = %d addresss of num = %u", num, &num); return 0; }
OPCIONES:
a) Error de compilación
b) num = 10 dirección de num = 2293436
num = 11 dirección de num = 2293438
c) num = 10 dirección de num = 2293436
num = 11 dirección de num = 2293440
d) num = 10 dirección de num = 2293436
num = 11 dirección de num = 2293436
OUTPUT: (d)
Explicación: Aquí, una variable num tiene el valor 10 y obtiene su dirección como 2293436, luego el incremento se realiza como num++, que usa el mismo espacio de direcciones para almacenar el valor incrementado.
Pregunta 5: ¿Cuál será el resultado del siguiente programa?
#include <stdio.h> int main() { int i = 25; int* j; int** k; j = &i; k = &j; printf("%u %u %u ", k, *k, **k); return 0; }
OPCIONES:
a) dirección dirección valor
b) dirección valor valor
c) dirección dirección dirección
d) error de compilación
OUTPUT : (a)address address value
Explicación: aquí una variable de puntero *j contiene la dirección de i y luego otra variable de puntero *k contiene la dirección de j.
ahora
k = dirección de j
*k = dirección de i
**k = valor de i.
Este artículo es una contribución de Abhishek kurmi .