首页 > 试题广场 >

设有如下定义:

[单选题]
设有如下定义:
struct ss
{
    char name[10];
    int age;
    char sex;
} std[3], *p = std;
下面各输入语句中错误的是____________


  • scanf("%d", &(*p).age);
  • scanf("%s", &std.name);
  • scanf("%c", &std[0].sex);
  • scanf("%c", &(p->sex));
scanf的第二个参数是一个地址,数组名本身就是一个地址
发表于 2017-08-15 14:51:37 回复(0)
scanf函数以字符串形式输入字符串,同时将输入的字符串赋值数组时,直接引用数组名即可,不用加取地址运算符
发表于 2017-05-17 14:52:49 回复(0)
struct {
    char name[10];
    int age;
}std
定义结构体变量std,可以通过.访问结构体数组成员    即std.age

struct {
    char name[10];
    int age;
}std[3]
定义结构体数组,  std代表一个指针,指向整个结构数组的首地址    std->age   访问  std[0].age    (std+1)->age  访问 std[1].age

发表于 2017-09-14 15:05:13 回复(0)
B选项可以改为std->name或者std[0].name或者(*std).name
编辑于 2018-07-28 19:48:14 回复(3)
std是数组名,即数组元素的首地址,不能用.而应该用->解引用首元素。(std->name)就可以吧
发表于 2017-06-15 14:46:21 回复(2)
std是一个指针,指向std[0],因此,B选项应该改为scanf("%s", std->name);
发表于 2018-04-02 09:47:37 回复(2)
我是来说说A选项。 A中 &(*p).age。 p是指向std结构体数组的指针,那p保存std[0]地址 。 则*p就是取p地址的值,就是取std[0]这个ss型的结构体。 那么(*p).age就是std[0].age这个值。 &(*p).age就是再取这个值的地址。那么scanf("%d",&(*p).age); 。 其实就是输入 stc[0].age的值
编辑于 2017-07-20 15:32:34 回复(1)

在给出答案之前,我需要指出C语言中的一些规则。在C语言中,对于结构体的成员访问,有以下两种方式:

  1. 使用.操作符:当我们有一个结构体变量时,可以使用.操作符来访问其成员,例如std[0].sex。
  2. 使用->操作符:当我们有一个指向结构体的指针时,可以使用->操作符来访问其成员,例如p->sex。

根据上面的规则,我们可以分析每个选项:

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成员,然后通过&取其地址进行输入。

发表于 2023-11-15 09:48:00 回复(0)
数组迷本身就是地址
发表于 2023-09-17 18:48:49 回复(0)
std 是数组的首地址哦!  所以要用到 -> 符号
发表于 2021-10-26 09:23:22 回复(0)
对于A,我是这样解释的。首先,std[3]是一个结构体数组,其内部有三个元素,每个元素是一个结构体类型。std可以看成是一个二维数组。即std[][]形式。对std[i][j]内部元素的访问可以有多种形式,其中一种是行指针形式,即(*p)[j],而对于std来说,其内部是一个结构体,所以对其成员访问,用.(点)访问符号,即(*p).age
发表于 2018-06-08 09:29:22 回复(0)
*p=std,p存放std[0]的地址,&(*p)就是取这个地址。
发表于 2018-02-11 22:57:42 回复(0)
std是一个指向数组首地址的指针,不用加&
编辑于 2024-03-16 22:28:09 回复(0)
cd不是取地址吗,把%c换成%p可以吗各位佬们
发表于 2023-09-28 20:07:49 回复(0)
1. d选项 *p=(p->)
2.b选项,可以用std->name;
发表于 2022-10-19 21:12:36 回复(0)
B选项可以改为std->name或者std[0].name或者(*std).name
发表于 2022-04-30 17:22:02 回复(0)
结构体可以直接理解为轻量级class,相关操作符作用均相同
发表于 2021-11-08 11:23:32 回复(0)
数组名理解为一个指针,指针指向元素需要→
发表于 2021-10-10 17:35:43 回复(0)
这个D是要输出什么呢
发表于 2018-09-20 10:37:48 回复(0)