Re: Comparar Dos Arrays Dinámicos O Nativos
esto no es rigurosamente cierto en el caso de arrays de estructuras, en este caso cada estructura tiene su propia direccion de memoria y no necesariamente son contiguas
Exactamente, porque se trata de un tipo complejo, constituido por una propia area de memoria, reservada para contener tipos atomicos y complejos.
Pero, en el array de Estructuras (y tambien en una Estructura contenente Estructuras), las
direcciones de memoria de cada elemento-Estructura están guardadas -
en aquel area de memoria - sin embargo de manera
contigua.
Vamos a ver lo que resulta desde este codigo:
#include <stdio.h>
#include <stdlib.h>
struct Terziaria {
unsigned char uc;
short sh;
int in;
};
struct Secondaria {
unsigned char uc;
short sh;
int in;
};
struct Principale {
struct Secondaria *se;
struct Secondaria *te;
};
int main () {
int i;
struct Principale *pr = malloc(sizeof(struct Principale));
pr->se = malloc(sizeof(struct Secondaria));
pr->te = malloc(sizeof(struct Terziaria));
for (i=0; i<16; i++)
printf("%d = %.2x\n", i, *((unsigned char *) pr + i) );
free(pr->te);
free(pr->se);
free(pr);
return (0);
}
Usando en
Gambas el array de tipo
Variant[ ], la organización de los valores en su área de memoria reservada es muy particular; y es posible verla en el achivo fuente "
.../main/share/gambas.h ".
En este archivo hay la Estructura, escrita en C, llamada "
GB_VARIANT", costituida:
a) por un valor de tipo
Long (y por eso ocupa 8 byte de memoria), que identifica el tipo de valor que lo sigue. En particular el tipo está identificado por el correspondiente número presente arriba por aquel archivo en las definiciones llamadas "
gambas datatypes identifiers".
b) los datos del valor (que ocupa 8 byte por la "
union" que es el 2° miembro de la Estructura fuente del
Variant)
Por lo que el área de memoria - donde están guardados los valores de un array de tipo
Variant[ ] - está asì organizada:
número-tipo
datos-que-constituyen-el-valor
número-tipo
datos-que-constituyen-el-valor
....etc
....etc
Si el tipo es un array o una Estructura, en el miembro - que arriba yo he llamado
datos-que-constituyen-el-valor - nosotros tendremos una
dirección de memoria.
De todas formas está claro que la
dirección del area de memoria de un array de Estructuras es un "
Puntero de Punteros ": es decir el "Puntero" apunta a un área de memoria (más precisamente a la primera celda de aquel area) contenente
direcciones de areas de memoria de aquellas Estructuras (cada
dirección apunta a un especifica área de memoria; y más precisamente cada
dirección apunta a la primera celda de cada área).