访问嵌套结构的元素
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 );
}
当我执行以下代码时,我收到此行的错误消息 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 );
}