Usando enumeración para moverse por el tamaño de matriz variable

Estoy usando enumeración para recorrer el tamaño de matriz variable. El problema principal aquí es que un valor entero anterior mencionará qué valor de enumeración usar. Ejemplo 1, se puede indexar. Pero no entiendo MyEnumArray[] = {A, B, C, D} ya que esto fue prueba y error, pero [por qué puedo declarar y hacer una matriz aquí e indexarlo mientras que no puedo hacer lo mismo con typedef y cómo puedo haga lo mismo con typedef Ejemplo 3 o cómo se puede llegar al mismo resultado].

//EXAMPLE 1 - WORKS No typedef
#include <stdio.h>
#include <stdlib.h>

enum Letter
{
    A = 1,
    B,
    C,
    D
} MyEnumArray[] = {A, B, C, D}; 

//Looked up other examples and coded and this works. 
//But why is MyEnumArray declared here as an array and same values and I can index it to make it work. 
//It does not work with typedef Example 3 below and so I had to remove MyEnumArray. 

void printOut(int variableArraySize);
int main()
{
    int arrayVariableSize = 3;
    enum Letter getArraySize = MyEnumArray[arrayVariableSize];
    printOut(getArraySize);

    return 0;
}

void printOut(int variableArraySize)
{
    printf("Number of Array Inputs: %d\n", variableArraySize);
    int xVarryingArray[variableArraySize];

    for (int i = 0; i < variableArraySize; i++)
    {
        xVarryingArray[i] = i * i * 10;
        printf("xVarryingArray[%d] = %d\n", i, xVarryingArray[i]);
    }
}
//Output 
Number of Array Inputs: 4
xVarryingArray[0] = 0 
xVarryingArray[1] = 10
xVarryingArray[2] = 40
xVarryingArray[3] = 90
//EXAMPLE 2 - With typedef does work but, the enum value is hard-coded. 
#include <stdio.h>
#include <stdlib.h>

typedef enum Letter
{
    A = 1,
    B,
    C,
    D
} Letter;
void printOut(int variableArraySize);
int main()
{
    int arrayVariableSize = 3;
    enum Letter getArraySize = D; //I want to somehow get this value from arrayVariableSize
    printOut(getArraySize);

    return 0;
}

void printOut(int variableArraySize)
{
    printf("Number of Array Inputs: %d\n", variableArraySize);
    int xVarryingArray[variableArraySize];

    for (int i = 0; i < variableArraySize; i++)
    {
        xVarryingArray[i] = i * i * 10;
        printf("xVarryingArray[%d] = %d\n", i, xVarryingArray[i]);
    }
}

Ejemplo 3: Quiero hacer que esta versión funcione - no compila Esta versión con typdef no funciona. Y quiero establecer el valor de enumeración de un valor de variable entera anterior. ¿Cómo se puede hacer esto?

#include <stdio.h>
#include <stdlib.h>

typedef enum Letter
{
    A = 1,
    B,
    C,
    D
} MyEnumArray[] = {A, B, C, D};
void printOut(int variableArraySize);
int main()
{
    int arrayVariableSize = 3;
    enum Letter getArraySize = MyEnumArray[arrayVariableSize]; //I want to somehow get this value from arrayVariableSize
    printOut(getArraySize);

    return 0;
}

void printOut(int variableArraySize)
{
    printf("Number of Array Inputs: %d\n", variableArraySize);
    int xVarryingArray[variableArraySize];

    for (int i = 0; i < variableArraySize; i++)
    {
        xVarryingArray[i] = i * i * 10;
        printf("xVarryingArray[%d] = %d\n", i, xVarryingArray[i]);
    }
}
Answer