参考答案和解析
正确答案: A
解析:
可用以下3种形式来引用结构体变量中的成员,其中结构体变量名也可以是已定义的结构体数组的数组元素:①结构体变量名.成员名;②指针变量名->成员名;③(*指针变量名).成员名。题目中a为数组名是地址常量,不是指针变量,A项引用错误。a[0]为变量名,B项引用正确。p为指针,且正确的指向结构体变量,C项引用正确。D项符合第三种引用方式,引用正确。答案选择A选项。
更多“设有如下定义:struct{int n;char c;}a[2], *p=a;则以下错误引用结构体成员n的是(  )。”相关问题
  • 第1题:

    以下结构体类型说明和变量定义中正确的是( )。

    A.typedef struct

    B.struct REC; {int n;char c;}REC; {int n;char c;}; REC t1,t2; REC t1,t2;

    C.typedef struct REC;

    D.struct {int n=0;char c='A';}t1,t2; {int n;char c;}REC; REC t1,t2;


    正确答案:A
    解析:选项A中用typedef定义结构体类型名REC后,REC能够唯一地标识这种结构体类型,可以用REC定义变量,这是正确的结构体类型变量的定义,选项C是错误的。选项B中“struct REC;”后面不应该加分号。选项D中的结构体是一个无名结构体类型,REC是结构体变量,不是结构体类型,因此不能用来定义结构体变量。

  • 第2题:

    设有如下说明typedef struct{ int n; char c; double x;}STD;则以下选项中 ,能正确定义结构体数组并赋初值的语句是

    A.STD tt[2]={{1,'A',62},{2,'B',75}};

    B.STD tt[2]={1,"A",62,2,"",75};

    C.struct tt[2]={{1,'A'},{2,'B'}};

    D.struct tt[2]={{1,"A",62.5},{2,"B",75.0}};


    正确答案:A
    解析:给结构体数组赋初值时,要将其成员值依次放在一对花括号中。

  • 第3题:

    设有定义“struct {int a; float b; char c;} abc, *p_abc=&abc;”,则对结构体成员a的引用方法可以是abc.a和p_abca。


    正确答案:->
    本题主要考查结构体的引用。在本题中,首先定义了一个结构体和该结构体的变量abc,然后定义一个结构指针变量p_abc,并使其指向该结构体变量abc。
    结构成员的引用形式主要有两种。第一种的表达式为:
    结构变量名.成员名
    其中,“.”是一个小数点字符,称为结构成员运算符,“.”连接结构变量名和成员名。“.”属于最高优先级运算符。所以,结构成员的引用表达式在任何地方出现都是一个整体,它的作用与一个下标变量(对数组元素的引用)相同,前者表示一个结构成员,后者表示一个数组成员。
    第二种的表达式为:
        (*结构指针变量).成员名
    或者
        结构指针变量->成员名
    因此,本题对结构体成员的引用方法可以为abc.a和p_abc->a。

  • 第4题:

    以下对结构体类型变量td的定义中,错误的是 ______。

    A.typedef struct aa

    B.struct aa {int n; {int n; float m; float m; }AA; }td; AAtd; struct aa td;

    C.struct

    D.struct {int n; {int n; float m; float m; }aa; }td; struct aa td;


    正确答案:C
    解析:选项C中的aa本身就为结构体变量名,所以不能再用它来定义结构体变量,故此种定义方法是错误的。

  • 第5题:

    有如下说明和定义语句: struct student { int age; char num{8};}; struct student stu[3]={{20,"200401"},{21,"200402"),{19,"200403"}}; struct student *p=stu; 以下选项中引用结构体变量成员的表达式错误的是( )。

    A.(p++)->num

    B.p->num

    C.(*p).num

    D.stu[3].age


    正确答案:D
    解析:结构体变量也有地址,因此可以把它的地址赋值给一个指针变量,然后通过该指针变量来引用结构体的成员,选项A和选项B就是通过指针变量来引用结构体的成员,故选项A和选项B都正确,也可以通过结构体数组元素的成员引用,选项C和选项D属于这种情况,而在选项D中stu[3].age不正确,因为结构体数组stu共有3个元素,其下标应该为0,1,2。所以,4个选项中选项D符合题意。

  • 第6题:

    设有以下语句 ( ) struct st {int n;struct st * next;}; static struct st a [3]={5,&a [1],7,&a[2],9,'\0'},*p; p=&a[0] 则表达式( )的值是6。

    A.p+ + ->n

    B.p->n + +

    C.(* P). n+ +

    D.+ +p - >n


    正确答案:D

  • 第7题:

    有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是A.(p++)->num B.p->num C.(*p).num D.stu[3].age


    正确答案:D
    引用形式有以下三种:①结构体变量.成员名;②(*p).成员名;③p→成员名。所以A、B、C答案都是正确的。故本题答案为D。

  • 第8题:

    设有以下语句: struct st{int n;struct st*next;}; static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p; p=&a[0];则表达式的值是6的为______。

    A.p++->n

    B.p->n++

    C.(*p).n++

    D.++p->n


    正确答案:D
    解析:本题主要考查结构体变量的定义和应用,以及运算符的优先级。

  • 第9题:

    设有定义语句“struct {int a;float b;char c;}abc,*p;”,则对结构体成员a的引用可以是( )。

    A、abc.a

    B、abc->a

    C、(*p).a

    D、p->a


    参考答案ACD

  • 第10题:

    以下对结构体类型变量td的定义中,错误的是( )。

    A.typcdef struct aa { int n; float m; } AA; AA td;

    B.struct aa {int n; float m; } struct aa td;

    C.struct {int n; float m; } aa; struct aa td;

    D.struct {int n; float m; }td;


    正确答案:C
    解析:选项A)中typedef的作用是声明一个新的类型名AA代替已有的结构体类型名struetaa,然后用AA定义结构体类型变量td;选项B)直接用结构体类型名structaa定义结构体类型变量td;选项C)中的aa本身就为结构体变量名,所以不能再用它来定义结构体变量,该项错误;选项D)省去了结构体名,直接将td定义为结构体变量,正确。

  • 第11题:

    单选题
    以下结构体类型说明和变量定义中正确的是(  )。
    A

    typedef struct{int n;char c;}REC; REC t1,t2;

    B

    struct REC;{int n;char c;}; REC t1,t2;

    C

    typedef struct REC:{int n=0;char c = 'A';} t1,t2; REC t1,t2;

    D

    struct{int n;char c;}REC;


    正确答案: A
    解析:
    A项,用typedef定义结构体类型名REC后,可以用REC定义变量。B项,“struct REC;”后面不应加分号;C项,没有这样的书写形式;D项,REC定义的是一个变量,不是结构体类型,因此不能用来定义结构体变量。答案选择A选项。

  • 第12题:

    单选题
    设有C语句:struct T{int n;double x;}d,*p;,若要使p指向结构体变量中的成员n,正确的赋值语句是()
    A

    p=&d.n

    B

    *p=d.n

    C

    p=(struct T *)&d.n

    D

    p=(struct T *)d.n


    正确答案: D
    解析: 暂无解析

  • 第13题:

    设有以下说明语句

    typedef struct

    { int n;

    char ch[8];

    } PER;

    则下面叙述中正确的是

    A.PER 是结构体变量名

    B.PER是结构体类型名

    C.typedef struct 是结构体类型

    D.struct 是结构体类型名


    正确答案:B
    解析:本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。

  • 第14题:

    设有定义“stmct{int a;float b;char c}abc,*p_abc=&abc;”,则对结构体成员a的引用方法可以是abc.a和p_abc______。


    正确答案:
    若结构体变量abc有成员a,并有指针p_abc指向结构变量abe,则引用变量abe成员s的标记形式有abe.a和 p_abc->a。

  • 第15题:

    设有如下定义:

    struct sk

    { int n;

    float x; } data, *p;

    若要使p指向data中的n域,正确的赋值语句是

    A.p=&data.n;

    B.*p=data.n;

    C.p=(struct sk*)&data.n;

    D.p=(struct sk*)data.n;


    正确答案:C
    解析:本题主要考查了结构体变量引用成员数据的方法,主要有以下几种:结构体变量名.成员名或结构体指针->成员名的方法来引用结构体成员。

  • 第16题:

    下列结构体类型说明和变量定义中正确的是( )。

    A.typedef struct {int n; char c;}REC; REC t1,t2;

    B.struct REC; {int n; char c;}; REC t1,t2;

    C.typedef struct REC; { int n=0; char c='A';} t1,t2;

    D.stmct { int n; char c;} REC; REC t1,t2;


    正确答案:A
    解析:定义结构体类型的一般形式为:struct结构体名{成员列表}:struct结构体名后不能加“:”号,所以选项B)、C)错误,选项D)中定义无名称的结构体类型同时定义结构体变量形式应为struet t1,t2;选项A)为用户自定义类型,其为正确的定义形式。

  • 第17题:

    设有以下说明语句 typedef struct { int n; char ch[8]; }PER;

    A.PER 是结构体变量名

    B.PER 是结构体类型名

    C.typedef struct 是结构体类型

    D.struct 是结构本类型名


    正确答案:B
    解析:本题考核的知识点是如何使用typedef定义新的类型。本题通过typedef在定义一个结构体类型的同时,把它自定义成类型名PER,故PER是结构体类型名。所以,4个选项中B为所选。

  • 第18题:

    若有以下定义和语句 struct a{ int n,m;}; struct a st[3]={{2,3},{4,5},{6,7}}; struct a*p=st;则以下错误的引用是A.(p++)->n; B.st[0].n; C.(*p).n; D.P=&st.m,


    正确答案:D
    题目中给出了一个结构体,结构体类型名为 struct  a。该结构体成员列表包括两个整型变量。随后定义了一个结构体数组st[3],该数组的大小为3,同时定义了一个结构体指针p,指向数组st。
    选项A为(p++)->n,是指先将p的指针执行++操作,指向st[1],然后得到该结构体变量中的值n。
    选项B为st[0].n,这个是标准的结构体数组变量引用,得到结构体数组变量st[0]中的值n。
    选项C为(*p).n,该表达式与p->n是等价的,得到当前指针所指结构体变量中的值n。
    选项D为p=&st.m,该选项是错误的。若p是一个定义过的指向结构体变量的指针,则用它指向结构体变量的某一个成员,编译时将指出地址的类型不匹配。

  • 第19题:

    有以下说明和定义语句:struct student{int age; char num[8] ;};struct student stu [3] = { { 20, "200401" } , {21, "200402" } , {19, "200403" } };stract student * p = stu;以下选项中引用结构体变量成员的表达错误的是( )。

    A.(p++) ->num

    B.p- >num

    C.( *p).num

    D.stu[3].age


    正确答案:D
    解析:结构体变量的引用有三种形式:结构体变量.成员名;(*p).成员名;P->,成员名。所以选项A),B),C)都是正确的。

  • 第20题:

    设有以下说明语句: typedef struct { int n; char ch[8]; }PER; 则下面叙述中,正确的是( )。

    A.PER是结构体变量名

    B.PER是结构体类型名

    C.typedef struct是结构体类型

    D.struct是结构类型名


    正确答案:B
    解析:本题考核用typedef定义自己的变量类型。C++语言允许定义用关键字typedef所命名的新的数据类型。实际上,没有建立一个新的数据类型,而仅是对存在的类型定义了一个新的名字。所定义的新名是现有的类型名的补充,而不是取代。

  • 第21题:

    假设有如下定义:struct a{int n;float k}data,*p;若要使p指向data中的成员n,正确的赋值语句是

    A.p=&data.n;

    B.*p=data.n;

    C.p=(struct a*)&data.n;

    D.p=(struct a*)data.n;


    正确答案:C
    解析:可以通过强制类型转换(structa*)完成指针赋值。选项A)中&data.n取的是结构体中成员的地址而不是结构的地址,尽管这两个地址的值是相同的,但仍然不允许进行相互赋值;选项B)中的指针p还没有指向一个具体的空间,给其赋值没有意义;选项D)把一个整型变量强制转化为结构类型的指针没有任何实在意义。

  • 第22题:

    设有C语句:struct T{int n;double x;}d,*p;,若要使p指向结构体变量中的成员n,正确的赋值语句是()

    • A、p=&d.n
    • B、*p=d.n
    • C、p=(struct T *)&d.n
    • D、p=(struct T *)d.n

    正确答案:C

  • 第23题:

    单选题
    有如下定义:struct{  int num;  char name[10];  struct {  int y;  int m;  int d; }birth; }s,*ps=&s;以下对内嵌结构体成员的引用形式错误的是(  )。
    A

    ps.birth.y

    B

    s.birth.y

    C

    ps->birth.y

    D

    (*ps).birth.y


    正确答案: C
    解析:
    使用结构体指针对结构体成员进行访问时,形式为:结构指针名->结构成员名,或者(*结构指针名).结构成员名,题目中ps为结构体指针,答案选择A选项。

  • 第24题:

    单选题
    设有如下定义:struct{int n;char c;}a[2], *p=a;则以下错误引用结构体成员n的是(  )。
    A

    (*a)->11

    B

    a[0].n

    C

    p->n

    D

    (*p).n


    正确答案: D
    解析:
    可用以下3种形式来引用结构体变量中的成员,其中结构体变量名也可以是已定义的结构体数组的数组元素:①结构体变量名.成员名;②指针变量名->成员名;③(*指针变量名).成员名。题目中a为数组名是地址常量,不是指针变量,A项引用错误。a[0]为变量名,B项引用正确。p为指针,且正确的指向结构体变量,C项引用正确。D项符合第三种引用方式,引用正确。答案选择A选项。