若有以下程序段: struct st {int n; int*m: }; int a=2,b=3,c=5; struct st s[3]=({101,&a},{102,&c},{103,&B)}; main() {struct st*p; p=s; } 则以下表达式中值为5的是( )。A.(*p).mB.*(p+1)->mC.*(p++)->nD.(p++)(*m)

题目

若有以下程序段: struct st {int n; int*m: }; int a=2,b=3,c=5; struct st s[3]=({101,&a},{102,&c},{103,&B)}; main() {struct st*p; p=s; } 则以下表达式中值为5的是( )。

A.(*p).m

B.*(p+1)->m

C.*(p++)->n

D.(p++)(*m)


相似考题
更多“若有以下程序段: struct st {int n; int*m: }; int a=2,b=3,c=5; struct st s[3]=({101,a},{102,c},{103,B)}; main() {struct st*p; p=s; } 则以下表达式中值为5的是( )。A.(*p).mB.*(p+1)->mC.*(p++)->nD.(p++)(*m)”相关问题
  • 第1题:

    以下程序运行后的输出结果【 】。

    struct NODE

    {int k;

    struct NODE *link;

    };

    main()

    {structNODEm[5],*p=m,*q=m+4;

    int i=0;

    while(p!=q){

    p->k=++i;p++;

    q->k=i++;q-;

    }

    q->k=i;

    for(i=0;i<5;i++)printf("%d",m[i].k);

    printf("\n");

    }


    正确答案:13431
    13431 解析:程序执行过程如下:
    p=m,q=m+4,条件9!=q成立,执行p->k=++i;,由于是“前加”,所以m[0].k=1,执行p++后p=m+1;执行q->k=i++;,由于是“后加”,所以m[4].k=1,然后使得i加上1,即i=2,q-后,q=m+3: p=m+1,q=m+3,条件p!=q成立,执行p->k=++i;,由于是“前加”,所以i=3,m[0].k=3,执行p++后p=m+2:执行 p->k=++i;,由于是“后加”,所以m[4].k=3,i=4,q-后,q=m+2; p=m+2,q=m+2,条件p!=q不成立,则执行p->k=i;即m[2].k-4;故输出的值为13431。

  • 第2题:

    以下程序的输出是______。 struct st {int x;int*y; }*p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[1],60,&dt[2],60,&dt[3]}; main() { p=aa; printf("%d\n",++(p->X)); }

    A.51

    B.11

    C.50

    D.60


    正确答案:A
    解析:p是指向结构aa的结构指针,++(p->x)是对p的x成员的值进行加1。p=aa使得p指向aa的首地址,p->x的值为50,那么++(p->X)就等于51。

  • 第3题:

    若有以下说明和语句: struct st{int n;char*ch;} struct st a[3]={5,"abc"7,"def",9",ghk"),*p=a; 则值为6的表达式是______。

    A.p++->n

    B.p->n++

    C.(*p).n++

    D.#NAME?


    正确答案:D
    解析:根据结构变量的存储特点,p+l意味着增加地址值为结构体数组a的—个元素所占的字节数,即P++使p由a[0]指向a[1]起始地址。本题++p->n得到p指向的结构体变量中成员n的值使之加1。因为p指向数组a起始地址,p->n的值为5,再执行自加l运行,结果为6。

  • 第4题:

    有以下程序 include struct st { int x,y;} data[2]={1,10,2,20}; main(

    有以下程序 #include <stdio.h> struct st { int x,y;} data[2]={1,10,2,20}; main() { struct st *p=data; printf("%d,",p->y); printf("%d\n",(++p)->x); } 程序的运行结果是______。

    A.10,1

    B.20,1

    C.10,2

    D.20,2


    正确答案:C
    解析:本题定义了一个包含两个元素(data[0]、data[1])的结构体数组data,其中data[0].x=1;data[0].y=10;data[1].x=2; data[1].y=20。在主函数中,定义了一个指向结构体数组的结构体指针变量p,使得p指向结构体数组的首地址,所以p->y访问的是第一个鲒构体数组元素的第二个值,即data[0].y;(++p)->x访问的是第二个结构体数组元素的第一个值,即 data[1].x,所以程序输出结果为10,2。

  • 第5题:

    下列程序的输出结果是______。struct st{ int x;int*y;}*p; int dt[4]={ 10,20,30,40 }; struct st aa[4]={50,&dt[0],60,&dt[0],60,&dr[0],60,&dr[0],} main(){ p=aa; printf("%d\n",++(p->x));}

    A.51

    B.11

    C.10

    D.60


    正确答案:A

  • 第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 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
    解析:本题主要考查结构体变量的定义和应用,以及运算符的优先级。

  • 第8题:

    以下程序的输出是( )。 struct st { int x;int *y; } *p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],}; main() { p=aa; cout<+<+(p->x); }

    A.10

    B.11

    C.51

    D.60


    正确答案:C

  • 第9题:

    以下程序的输出结果是includestruct st{ int x;int *y;}*p;int dt[4]={10,20,30,40};s

    以下程序的输出结果是 #include<stdio.h> struct st { int x;int *y;}*p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],}; main() { p=aa; printf("%d\n",++(p->x));}

    A.10

    B.11

    C.51

    D.60


    正确答案:C
    解析:通过指针来引用结构体成员的方法是(指针变量)->结构体成员名。注意:结构体变量中的数据引用。

  • 第10题:

    设有以下C语言说明语句,则值为210的表达式是(33)。 struct s { int a;int *b;}; Int x0[]={110,120},x1[]={210,220}; struct s x[]={{100},{200}},*p=x; x[0].b=x0;x[1].b=x1;

    A.(++p)->a

    B.*p->b

    C.*(p++)->b

    D.*(++p)->b


    正确答案:D
    解析:注意到本试题中x为结构体数组,则数组名x代表数组首地址。x[0]、x[1]代表结构体数组元素。对于指向结构体数组的指针变量p,每次“+1”则指向下一个结构体数组元素。本题中++p后,由x[0]改指向x[1]。结构体数组x在定义时赋初值,但未对结构体成员b赋初值。语句“x[0].b=x0;x[1].b=x1;”的作用是对结构体数组x的成员b赋初值。对于选项A,(++p)->a等价于x[1].a==200。选项B,*p->b等价于*(x->b)==*x0==110。选项C,*(p++)->b等价于*(x[0].b)==110=x0[0]。选项D,*(++p)->b等价于*(x[1].b)==210=x1[0]。注意,在测试以上1个选项的输出值时,不能放在同一个printf函数中进行输出。因为函数中的参数运算顺序在C语言中是自右向左进行的,而p的值又是不断变化的,所以相互之间会产生影响。

  • 第11题:

    若有以下定义和语句 struct a { int n,m;}; struct a st[3]={{1,20},{2,19},{3,21}}; struct a*p=st; 则以下错误的引用是

    A.(p++)->n;

    B.st[0].n;

    C.(*p).n;

    D.p=&st.m;


    正确答案:D
    解析:可以用以下三种形式来引用结构体变量中的成员:结构体变量名.成员名、指针变量名->成员名和(*指针变量名).成员名。选项D)中“&st.m”取的是结构体中成员的地址而不是结构的地址。

  • 第12题:

    单选题
    若有以下程序段struct st{ int n; struct st*next;};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
    解析:
    定义长度为3的struct数组a,a中每个元素的next指向下一个元素,实际上数组a的元素构成了一条单链表,指针p指向单链表的头部,p->n等于5,p->next指向a[1]。ABD三项返回的都是p->n的值5。答案选择C选项。

  • 第13题:

    若有以下定义的语句: struct student { int age; int num;}; struct student stu[3]={{1001,20},{1002,19},{1003,21}}; main() { struct student *p; p=stu; …} 则以下不正确的引用是( )。

    A.(p++)->num

    B.p++

    C.(*p).num

    D.P=&stu.age.


    正确答案:D
    解析:结构体成员的引用可以用“结构体变量名.成员名”或者“结构体变量指针->成员名”两种方式来引用。注意:结构体类型的变量、数组和指针变量的定义。

  • 第14题:

    设有以下程序段: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

  • 第15题:

    若有以下程序段: struct st {int n; int*m;}; int a=2,b=3,c=5; struct st s[3]=({101,&a},{102,&c},{103,&b}}; main() {struct st*p; p=s; …} 则以下表达式中值为5的是( )。

    A.(p++)->m

    B.*(p++)->m

    C.(*p).m

    D.*(++p)->m


    正确答案:D

  • 第16题:

    若有以下说明和语句: struct st{int n;char * ch;}; struct st a[3]={5,"abc",7,"def",9,"ghk"},*p=a; 则值为6的表达式是 ______。

    A.p++->n

    B.p->n++

    C.(*p).n++

    D.++p->n


    正确答案:D
    解析:根据结构变量的存储特点,p+1意味着增加地址值为结构体数组a的一个元素所占的字节数,即p++使p由a[0]指向a[1]起始地址。本题++p->n得到p指向的结构体变量中成员n的值使之加1。因为p指向数组a起始地址,p->n的值为5,再执行自加1运行,结果为6。

  • 第17题:

    设有以下程序: struct st{int n;struct st *next;}; static struct st a[3]={5,&a[1],7,&

    设有以下程序: 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

  • 第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 S{int n;int a[20];};void f(struct S*P){int i,j,t;for(i=0;in-1;i++)fo

    有以下程序: struct S{int n;int a[20];}; void f(struct S*P) { int i,j,t; for(i=0;i<P->n-1;i++) for(j=j+1;j<P->n-1;j++) if(p->a[i]>p->a[j]) {t=P->a[i];p->a[i]=P->a[j];p->a[j]=t} } main() {int i;struct S s{10,{2,3,1,6,8,7,5,4,10,9}}; f(&s); for(i=0;i<s.n;i++)printf("%d",s.a[i]);} 程序运行后的输出结果是( )。

    A.3

    B.4

    C.5

    D.6


    正确答案:A
    解析:在主函数main()中定义了一个整型变量i和一个结构体变量s。f()函数中,定义了一个结构体指针类型的指针p,外层循环变量i表示数组的第i个元素,内层循环j表示数组的第i+1个元素,调用f()函数,通过指针变量p来引用结构体成员,并把它们进行从小到大排序,最后输出。

  • 第20题:

    设有以下程序: 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
    解析:p指向数组的第1个元素,由于运算符->优先级高于运算符++,可知选项A应先取p->n的值5,再使p++指向下一个元素;选项B,先取p->n的值5作为表达式的值,再使p->n的值加1;选项C与选项B等价:选项D,先使p->n的值增1(即值为6),再以此值作为表达式的值,本题应选择选项D。

  • 第21题:

    以下程序的输出结果是()。includestruct st{int x;int*y;}*p; int dt[4] ={ 10,20,30,4

    以下程序的输出结果是( )。 #include<stdio.h> struct st { int x; int *y;} *p; int dt[4] ={ 10,20,30,40 }; struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]}; main() { p=aa; printf("%d\n",++(p->x)); }

    A.10

    B.11

    C.51

    D.60


    正确答案:C
    解析:由于数组名保存了数组的首地址,即数组中第一个元素的地址,执行p=aa;后,p指向aa[0],p->x相当于aa[0].x,也就是50,经过自增运算后,显示结果为51。

  • 第22题:

    以下程序的输出结果是 ( ) struct st { int x; int * y;} * p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,& dt[0],60 &dt[0],60,&dt [0]}; main( ) { p=aa; printf("%d\n",+ +(p->x)); }

    A.10

    B.11

    C.51

    D.60


    正确答案:C

  • 第23题:

    以下C语言程序的输出结果是( )。struct s{int x,y;}data[2]={10,100,20,200};main( ){struct s*p=data;p++;printf(“%d\n”,++(p->x));}

    A.10
    B.11
    C.20
    D.21

    答案:D
    解析:
    data是s类型的数组,即结构体数组,用{10,100,20,200}赋值,可知:data[0].x=10data[0].y=100data[1].x=20data[1].y=200struct s*p,p是data数组的指针。指向数组的第一个元素,*p即为data[0]。p++之后,即地址向后移动,此时p指向数组的第二个元素,*p即为data[1].p->x和(*p).x是一样的,p->x和data[1].x等价。所以在++(p->x)之后,data[0].x的值变为21。输出21。