Que tal, tengo unas dudas respecto a cuestiones con punteros en C que no logro entender, espero que me puedan ayudar, se los agradecería mucho.
El codigo es el siguiente:
struct alumno{
int legajo;
char genero;
char nombre[30];
float promedio;
};
int main(){
struct alumno *P; // PUNTERO PARA EL VECTOR DE ESTRUCTURAS EN MEMORIA DINAMICA
int I;
P = (struct alumno*) malloc(3 * sizeof(struct alumno));
printf("\n\n\t INGRESO DE LOS DATOS");
for( I = 0 ; I < N ; I++)
{
printf("\n\n\t INGRESE EL NOMBRE : ");
gets((P+I)->nombre);
printf("\n\t INGRESE EL LEGAJO : ");
scanf("%d", &((P+I)->legajo));
printf("\n\t INGRESE EL GENERO : ");
scanf("%c", &((P+I)->genero));
printf("\n\t INGRESE EL PROMEDIO : ");
scanf("%f", &((P+I)->promedio));
fflush(stdin);
}
Lo que no logro entender es por que en los scanf es necesario utilizar el operador & para su direccion en memoria. No es que al estar apuntando a un campo de la struct alumno ya es una dirección? Y por que en el caso del gets no necesito ponerlo? No lo entiendo.
Gracias por su tiempo!