Qual o tamanho (em bytes) de cada um dos arrays abaixo e como você acha que eles são
armazenados em memória?
int b[2];
short a[2][3];
Depois de responder, utilize uma main como abaixo para testar
e veja o que a função dump (do lab2) mostra.
int main (void) {
int i,j;
short a[2][3];
int b[2];
for (i=0;i<2;i++) {
b[i] = i;
for (j=0;j<3;j++)
a[i][j] = 3*i+j;
}
printf ("b: \n");
dump (b, sizeof(b));
printf ("a: \n");
dump (a, sizeof(a));
return 0;
}
Use a função dump para ver como a estrutura abaixo é armazenada:
struct X {
int a;
short b;
int c;
} x;
Experimente inicializá-la com valores facilmente "reconhecíveis" na memória, como, por exemplo:
struct X {
int a;
short b;
int c;
} x = {0xa1a2a3a4, 0xb1b2, 0xc1c2c3c4};
Imprima também o tamanho dessa estrutura (sizeof).
(Sim, existe um "buraco" entre dois campos da estrutura. Você sabe explicá-lo?)
Qual o tamanho, e como os tipos abaixo são organizados na memória?
Depois de escrever suas respostas use a função dump para
conferí-las.
Uma sugestão de programa de teste, com valores "reconhecíveis" para os
campos das estruturas está aqui.
struct X1 {
char c1;
int i;
char c2;
};
struct X2 {
long l;
char c;
};
struct X3 {
int i;
char c1;
char c2;
};
struct X4 {
struct X2 x;
char c;
};
struct X5 {
char c1;
char c2;
char c3;
};
struct X6 {
short s1;
int i;
char c[3];
short s2;
};
union U1 {
int i;
char c[5];
};
union U2 {
short s;
char c[5];
};