• Barajar
    Activar
    Desactivar
  • Alphabetizar
    Activar
    Desactivar
  • Frente Primero
    Activar
    Desactivar
  • Ambos lados
    Activar
    Desactivar
  • Leer
    Activar
    Desactivar
Leyendo...
Frente

Cómo estudiar sus tarjetas

Teclas de Derecha/Izquierda: Navegar entre tarjetas.tecla derechatecla izquierda

Teclas Arriba/Abajo: Colvea la carta entre frente y dorso.tecla abajotecla arriba

Tecla H: Muestra pista (3er lado).tecla h

Tecla N: Lea el texto en voz.tecla n

image

Boton play

image

Boton play

image

Progreso

1/12

Click para voltear

12 Cartas en este set

  • Frente
  • Atrás
¿Cómo afectan calificadores como unsigned en el tamaño de una variable?
No afectan como tal al tamaño de la variable, sino al rango de valores que pueden tomar.
¿Cuánto ocupa un unsigned char comparado con un char?
Ocupa lo mismo, 1 byte. La diferencia entre ambos se encuentra en el rango de valores que puede tomar.
¿Cuánto ocupa un puntero respecto a su tipo de dato?
Un puntero siempre ocupa lo mismo, independientemente de su tipo base. Como los punteros almacenan direcciones de memoria, lo que ocupan se corresponde con el tamaño de una dirección de memoria.
El tamaño de la dirección de memoria viene determinado principalmente por la arquitectura, aunque también depende del sistema operativo (si es de 32 o de 64 bits) y del compilador (si está configurado para 32 o 64 bits).
¿Quién/qué fija el tamaño de los tipos?
El tamaño de los tipos lo fija el estándar del lenguaje utilizado (ej: ANSI). Hay ciertos tipos de datos cuya especificación es más abierta, por lo que distintas implementaciones hacen que ocupen un tamaño u otro.
¿Puede variar el tamaño de un tipo de una máquina a otra?
Sí, ya que el tamaño depende no sólo del estándar de lenguaje, sino de la implementación del estándar que se utilice. Es posible que un tipo ocupe distinto entre distintas máquinas e incluso entre distintos compiladores dentro de la misma máquina.
¿Cuánto ocupa la siguiente estructura sizeof?
struct estructura {
char c;
long l;
double d;
}
¿Por qué no ocupa 17 bytes?
Ocupa 24 bytes. No ocupa 17 porque estamos utilizando arquitecturas de 64 bits (8 bytes), y al acceder a la memoria, accedemos a bloques de memoria. Al acceder a bloques de 8 bytes, en el caso de double y long si que se ocupa toda la memoria, pero en el caso de char, se "bloquea" un bloque de 8 bytes aunque solo haya uno ocupado, de ahí los 7 bytes sobrantes.
¿Qué problema hay si al mostrar un long o un short utilizo %d?
En el caso de short, leeremos dos bytes más de los necesarios. En el caso de long, solo lee cuatro de los bytes que le harían falta. Aunque en muchos casos no va a dar problema, cuando queramos aplicarlo a un caso general los dará, porque no se está leyendo suficiente memoria.
¿Qué problema surge si al mostrar un int utilizo %u?
Que interpretará todos sus bits, incluido el de signo, como un número. Además pueden aparecer errores si intento mostrar valores negativos. Esto se debe a que %u sirve para mostrar números decimales positivos.
¿Qué problema hay entre %hhu y %c para un unsigned char?
El hhu se utiliza para números que quepan en 1 byte sin signo, mientras que el char se utiliza para caracteres. Podríamos meter números para mostrarlo como carácter, pero para considerar el valor numérico, tenemos que utilizar hhu o hhd.
¿Qué imprimen estas instrucciones?
int num = 3;
int *pi = #
printf("A -> %d\n", num);
printf("B -> %p\n", pi);
printf("C -> %p\n", &num);
printf("D -> %p\n", &pi);
A --> Imprime el valor guardado en num
B --> Imprime la dirección de memoria que hay guardada en pi, es decir, la dirección de num
C--> Dirección de num
D --> Dirección de pi
C y B son iguales.
Haz una sentencia equivalente a esta:
printf("A -> %d\n", num);
utilizando el puntero pi, que va a num.
printf("A -> %d\n", *pi);
En los siguientes casos:
double a [10];
double * pa = a;
for (size_t i=0; i<10;i++){
printf ("%p == %p\n", &(a[i]), pa+i);
}
-------------------------------------------------------------
short s [10];
short * ps = s;

for (size_t i=0; i<10;i++){
printf ("%p == %p\n", &(s[i]), ps+i);
}
Cuando avanzo un puntero una posición, ¿cuántos bytes recorre?
De forma general, al avanzar un puntero recorre tantos bytes como sea su tipo base. En esos casos, en el bucle de short cada vez recorre dos bytes, mientras que en el bucle double recorre 8 cada pasada.