当我执行以下代码时,我收到此行scanf("%s",A.(T+i)->CNE)的错误消息
错误消息:expected identifier before '(' token|我能知道是什么问题吗?提前致谢。

typedef struct date
{
    int day;
    int month;
    int year;
}date;
typedef struct Student
{
    char CNE[10];
    char FirstName[30];
    char LastName[30];
    date BD;
    float Grades[6];
}Student;
typedef struct Class
{
    Student T[1500];
    int dim;
}Class;
Class input(Class A)
{
    int i=A.dim;
    printf("Enter the student CNE : ");
    scanf("%s",A.(T+i)->CNE);
}

最佳答案

.运算符之后唯一可以使用的是成员名称。它不能是诸如(T+i)的表达式。
通常,要访问成员i的元素T,将使用A.T[i],然后其CNE成员将是A.T[i].CNE
大概您一直在研究指针算法,并且对使用指针访问A.T[i]感兴趣。在这种情况下,A.T + i将给出i的元素A.T的地址。然后(A.T + i)->CNE将成为该元素的CNE成员。 (观察到A.T是一个数组,但是在此表达式中,它会自动转换为指向其第一个元素的指针。因此A.T + i等效于&A.T[0] + i,后者表示接受A.T[0]的地址并通过i元素将其前进。)

10-08 11:01