访问嵌套结构的元素

Accessing elements of a nested structures

当我执行以下代码时,我收到此行的错误消息 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) 不是结构 Class 的成员,所以不能使用 A.(T+i).

好像A.(T+i)->CNE应该是A.T[i].CNE.

同样可疑的是,修改后的 A 在函数 input 返回时被丢弃了。你好像忘了写 return A;.

. 运算符后唯一可以是成员名称。不能是(T+i).

等表达式

通常,要访问成员 T 的元素 i,将使用 A.T[i],然后其 CNE 成员将是 A.T[i].CNE

想必,您一直在研究指针运算,并对使用指针访问A.T[i]感兴趣。在这种情况下,A.T + i 将给出 A.T 的元素 i 的地址。然后 (A.T + i)->CNE 将是该元素的 CNE 成员。 (请注意,A.T 是一个数组,但是,在这个表达式中,它会自动转换为指向其第一个元素的指针。因此 A.T + i 等同于 &A.T[0] + i,表示取A.T[0] 的地址并将其前进 i 个元素。)

看来你的意思是

scanf("%s",A.T[i].CNE);

scanf("%s", ( A.T + i )->CNE );

就是你用的表达式

A.(T+i)->CNE

点运算符需要标识符而不是表达式。

你的函数 return 什么都没有,尽管它的 return 类型不是 void

可以通过以下方式声明和定义函数

void input(Class *A)
{
    int i = A->dim;
    printf("Enter the student CNE : ");
    scanf( "%s", ( A->T + i )->CNE );
}