Si se puede ver la notacion es diferenete pero creo que al final son la misma cosa o no entiendo que quiere decir cada uno, en si al ver esto me he mareado y ya no entiendo bien como es la notacion del "typedef struct"
Por favor no escribas el texto en mayúsculas, dificulta la lectura y en foros como este equivale a gritar.
----
Tienes tres casos distintos, en el primero:
typedef struct coordinate {
int x;
int y;
} Coordinate;
int main()
{
Coordinate c[N];
}
Declaras la estructura "struct coordinate" y su alias "Coordinate", puedes utilizar cualquiera de los dos para la declaración, esta se realiza en la función main: "c" es un array de N elementos de tipo "Coordinate".
En el segundo:
typedef struct {
int x;
int y;
} Coordinate;
int main()
{
Coordinate c[N];
}
La estructura es anónima (sin nombre, para ser exactos, sin etiqueta). De nuevo la declaración se realiza en la función main y aquí solo puedes utilizar el alias.
El tercero:
typedef struct Coordinatei {
int x;
int y;
} c[N];
int main()
{
struct coordinate c[N];
}
Es mas complicado y no es valido ya que:
1) Se declara la estructura "struct Coordinatei".
2) Se declara el alias "c" como equivalente a "struct Coordinatei [N]".
Ya que no hay declaración de "struct coordinate" tu compilador debe generar un mensaje de error.
Por ultimo y solo para redondear puedes utilizar "c" como el tipo para declarar un array, por ejemplo:
/* Forma usual */
struct Coordinatei a[N];
/* Utilizando el alias */
c b;
En ambas declaraciones el tipo es el mismo: array de N elementos de tipo "struct Coordinatei", la primera utiliza la forma usual y la segunda el alias.
Un saludo