Your Person type is an array of three structures, each of which is similar to your struct internalStruct. So, you can't just assign a struct internalStruct to a Person, though you can (with some help) assign it to one of the elements of a Person.
Also, copying arrays in C requires copying element by element, or copying the block of memory with a function like memcpy().
So the simplest way to do this would be to define struct internalStruct before Person, and define Person in terms of struct internalStruct:
struct internalStruct {
int age;
int height;
};
typedef struct internalStruct Person[3];
Doing it this way makes it possible to assign a struct internalStruct to an element of Person without type mismatches. For example:
struct internalStruct s1 = {4,32},
s2 = {2,4},
s3 = {2,4};
Person jon;
jon[0] = s1;
jon[1] = s2;
jon[2] = s3;
If you have an array of three struct internalStructs, you could copy it with a loop:
struct internalStruct st[3] = { {4,32}, {2,4}, {2,4} };
Person jon;
for (int i = 0; i < 3; i++)
jon[i] = st[i];
If you don't want to define Person in terms of struct internalStruct, then you have to make some assumptions, like that the layout of the two structures will be identical. If so, you could copy with memcpy():
struct internalStruct intr[3] = { {4,32}, {2,4}, {2,4} };
Person jon;
memcpy(jon, intr, sizeof(Person));
struct internalStruct { int age; int height; }; typedef struct internalStruct Person[3];?