C/Visual C - Posiciones contiguas de array que en la practica no parecen serlo

 
Vista:

Posiciones contiguas de array que en la practica no parecen serlo

Publicado por chipo (2 intervenciones) el 29/03/2015 05:39:03
Hola. Leyendo el capítulo de punteros del libro de C de Ritchie me surgió una duda y fue querer "comprobar" que los vectores se crean en espacios contiguos de memoria. La prueba que hice es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main( int argc, char *argv[] ){
	int x = 1, y = 2;
 
	printf("Dir de variable \"x\": %lu\n", &x);
	printf("Dir de variable \"y\": %lu\n", &y);
 
	int *vector[2];
	vector[0] = &x;
	vector[1] = &y;
 
	printf("Dir de vector[0]: %lu\n", &vector[0]);
	printf("Dir de vector[1]: %lu\n", &vector[1]);
 
	int vector2[2];
	vector2[0]=4;
	vector2[1]=5;
	printf("Dir de vector2[0]: %lu\n", &vector2[0]);
	printf("Dir de vector2[1]: %lu\n", &vector2[1]);
 
	return 0;
}

Resultados:
Dir de variable "x": 140733929041208
Dir de variable "y": 140733929041212
Dir de vector[0]: 140733929041184
Dir de vector[1]: 140733929041192
Dir de vector2[0]: 140733929041200
Dir de vector2[1]: 140733929041204

Siendo que esperaba algo así como:
Dir de variable "x": 140733929041208
Dir de variable "y": 140733929041212
Dir de vector[0]: 140733929041184
Dir de vector[1]: 140733929041185
Dir de vector2[0]: 140733929041200
Dir de vector2[1]: 140733929041201

Ojalá alguien pueda darme una mano.

Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Posiciones contiguas de array que en la practica no parecen serlo

Publicado por aguml (272 intervenciones) el 30/03/2015 03:23:37
son contiguos, lo que pasa es que un int ocupa 4 bytes y por eso va de 4 en 4. Si lo haces con un array de caracteres verás que va de 1 en 1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Posiciones contiguas de array que en la practica no parecen serlo

Publicado por chipo (2 intervenciones) el 30/03/2015 06:10:53
Hola. Antes que nada gracias por la respuesta. Hice la prueba modificando el código:

char x = 'a', y = 'b';

printf("Dir de variable \"x\": %lu\n", &x);
printf("Dir de variable \"y\": %lu\n", &y);

char *vector[2];
vector[0] = &x;
vector[1] = &y;

printf("Dir de vector[0]: %lu\n", &vector[0]);
printf("Dir de vector[1]: %lu\n", &vector[1]);

char vector2[2];
vector2[0]='x';
vector2[1]='y';
printf("Dir de vector2[0]: %lu\n", &vector2[0]);
printf("Dir de vector2[1]: %lu\n", &vector2[1]);

y obtengo este resultaodo:

Dir de variable "x": 140734128620894
Dir de variable "y": 140734128620895
Dir de vector[0]: 140734128620864
Dir de vector[1]: 140734128620872
Dir de vector2[0]: 140734128620880
Dir de vector2[1]: 140734128620881

Lo que no termino de comprender es por qué entre vector[o] y vector[1] está la diferencia de 8 bits (que ocupan un byte o char) y cuando trabajo con vector2 me muestra posiciones contiguas. Entiendo que un array es un puntero a una posición de memoria, por lo que esperaba que "vector" y "vector2" mostraran el mismo resultado en cuanto a la diferencia en sus posiciones.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Posiciones contiguas de array que en la practica no parecen serlo

Publicado por Tom (619 intervenciones) el 30/03/2015 13:53:34
No lo entiendes porque no analizas lo que escribes. Déjate de vectores y piensa en tipos de datos y memoria.

¿ Qué es int *vector[2]; ? Un array de 2 punteros a int, es decir un espacio de memoria capaz para 2 punteros a int.
¿ Cuanto ocupa en memoria un puntero ? En 64 bits generalmente 64 bits o sea 8 bytes, o sea 8 posiciones de memoria.

¿ Qué es int vector2[2]; ? Un array de 2 int.
¿ Cuanto ocupa un int ? Generalmente 32 bits, 4 bytes, 4 posiciones de memoria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Posiciones contiguas de array que en la practica no parecen serlo

Publicado por aguml (272 intervenciones) el 30/03/2015 18:08:12
exacto, un puntero siempre ocupará lo mismo indistintamente del tipo ya que lo que guarda es la direccion de una variable, objeto, etc...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar