ERROR ARRAY DE ESTRUCTURAS
Publicado por Pablo (3 intervenciones) el 18/05/2013 19:15:54
Buenas tardes.
Tengo el siguiente código:
si utilizo las sentencias comentadas no tengo problemas, pero me gustaría como podría traducirse utilizando aritmética de punteros. Tengo que p == &p[0] y (p+i) == &p[i], también tengo que *(p+i) == p[i], pero lo que no llego a encontrar es la relación entre XXXX == &(p[i].campo).
Gracias.
Tengo el siguiente código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char nombre[10];
int edad;
} Persona;
int leerContactos(void);
Persona* crearListin(int n);
int leerListin(Persona* p, int n);
int escribirListin(Persona* p, int n);
int main(void)
{
Persona* p;
int contactos;
int error;
contactos = leerContactos();
if(contactos < 1)
{
printf("Error al introducir nº de contactos");
}
else
{
p = crearListin(contactos);
if(p == NULL)
{
printf("No hay espacio en memoria para almacenar los contactos");
}
else
{
error = leerListin(p,contactos);
if(error < 0)
{
printf("Error al introducir los datos");
}
else
{
/*printf("%s (%d)",(p+1)->nombre,(p+1)->edad);*/
escribirListin(p,contactos);
}
free(p);
}
}
return (0);
}
/*--------------------------------------------------------------------*/
int leerContactos(void)
{
int n;
printf("Introduzca el nº de contactos a leer: ");
scanf("%d",&n);
return (n);
}
Persona* crearListin(int n)
{
return (Persona*) malloc(n*sizeof(Persona));
}
int leerListin(Persona* p, int n)
{
int i;
for(i=0; i<n; i++)
{
printf("Introduzca el nombre = ");
/*scanf("%s",&(p[i].nombre));*/
scanf("%s",(p+i)->nombre);
printf("Introduzca la edad = ");
/*scanf("%d",&(p[i].edad));*/
scanf("%d",(p+i)->edad);
}
}
int escribirListin(Persona* p, int n)
{
int i;
for (i=0; i<n; i++)
{
printf("%s ",(p+i)->nombre);
printf("(%d)\n",p[i].edad);
}
}
Pues bien. En la función leerListin
int leerListin(Persona* p, int n)
{
int i;
for(i=0; i<n; i++)
{
printf("Introduzca el nombre = ");
/*scanf("%s",&(p[i].nombre));*/
scanf("%s",(p+i)->nombre);
printf("Introduzca la edad = ");
/*scanf("%d",&(p[i].edad));*/
scanf("%d",(p+i)->edad);
}
}
si utilizo las sentencias comentadas no tengo problemas, pero me gustaría como podría traducirse utilizando aritmética de punteros. Tengo que p == &p[0] y (p+i) == &p[i], también tengo que *(p+i) == p[i], pero lo que no llego a encontrar es la relación entre XXXX == &(p[i].campo).
Gracias.
Valora esta pregunta


0