typedef struct Calendar {
    int day;
    int month;
    int year;
}Calendar;
typedef struct Person {
    char name[40];
    int age;
    float salary;
    Calendar birth;
}Person;
void add(Person * a, int * tam);
If I want to pass structure as argument and modify its original value I have to pass as pointer, but a array of structure shouldn't be passed as pointer of a pointer like a array of array? Why the compiler works with a pointer and gives error with a pointer of a pointer?
for (int i = 0; i < *tam + 1; i++)
{
        printf("Insert your name:\n");
        fgets(name, 30, stdin);
        *a[i].name = name;
}
The last line gives warning C4047: char differs in levels of indirections. If I remove '*' it doesn't compile. How do I correctly access a array member from a array of structure?
EDIT 1: To clarify here is the full add() function and main() function.
void add(Person * a, int * tam) {
    char name[30];
    int op = 0;
    int c, day = 0, month = 0, year = 0, Calendar = -1;
    float sal = -1;
    for (int i = 0; i < *tam + 1; i++)
    {
        printf("Insert your name:\n");
        fgets(name, 30, stdin);
        *a[i].name = name;
        while ((c = getchar()) != '\n' && c != EOF)
            ;
        do
        {
            printf("Insert %s's age:\n", name);
            scanf("%d", &op);
            while ((c = getchar()) != '\n' && c != EOF)
                ;
            if (!op)
                printf("invalid age!\n");
            else
                a[i].age = op;
        } while (op <= 0);
        do
        {
            printf("Insert %s's salary:\n", name);
            scanf("%f", &sal);
            while ((c = getchar()) != '\n' && c != EOF)
                ;
            if (sal < 0)
                printf("Invalid salary!\n");
            else
                a[i].salary = sal;
        } while (sal < 0);
        do
        {
            printf("Insert %s's date birth\n", name);
            printf("Day:\n");
            scanf("%d", &day);
            while ((c = getchar()) != '\n' && c != EOF)
                ;
            printf("Month:\n");
            scanf("%d", &month);
            while ((c = getchar()) != '\n' && c != EOF)
                ;
            printf("Year:\n");
            scanf("%d", &year);
            while ((c = getchar()) != '\n' && c != EOF)
                ;
            if ((day > 0 && day < 31) && (month > 0 && month < 12) && (year > 0))
            {
                Calendar = 1;
                a[i].birth.day = day;
                a[i].birth.month = month;
                a[i].birth.year = year;
            }
            else
                printf("Invalid calendar!\n");
        } while (Calendar != 1);
    }
    *tam++;
}
main() {
    Person book[10];
    int c, tam = 0;
    char op, out = 0;
    while (!out)
    {
        do
        {
            printf("1: Insert a profile\n");
            printf("2: Change a profile\n");
            printf("3: Erase a Profile\n");
            printf("4: Show all profiles\n");
            printf("5: Search\n");
            printf("0: Exit\n");
            scanf("%c", &op);
            while ((c = getchar()) != '\n' && c != EOF)
                ;
        } while (op < '0' || op > '5');
        switch (op)
        {
        case '1':
            add(book, &tam);
            break;
        case '2':
            break;
        case '3':
            break;
        case '4':
            read(book, &tam);
            break;
        case '5':
            break;
        case '0':
            out = 1;
            break;
        default:
            break;
        }
    }
}
 
    