设有如下定义:
struct ss { char name[10]; int age; char sex; } std[3], *p = std;下面各输入语句中错误的是____________
在给出答案之前,我需要指出C语言中的一些规则。在C语言中,对于结构体的成员访问,有以下两种方式:
根据上面的规则,我们可以分析每个选项:
A.scanf("%d", &(*p).age);这个表达式是合法的,因为(*p).age会访问p所指向的结构体对象的age成员,然后通过&取其地址进行输入。
B.scanf("%s", &std.name);这个表达式是不合法的,因为std.name是一个数组,而%s应该直接用于数组名,不需要再取地址。正确的写法应该是scanf("%s", &std[0].name);。
C.scanf("%c", &std[0].sex);这个表达式是合法的,因为&std[0].sex会取得std[0]中sex成员的地址用于输入。
D.scanf("%c", &(p->sex));这个表达式是合法的,因为(p->sex)会访问p所指向的结构体对象的sex成员,然后通过&取其地址进行输入。