参考答案和解析
正确答案: D
解析:
定义长度为3的struct数组a,a中每个元素的next指向下一个元素,实际上数组a的元素构成了一条单链表,指针p指向单链表的头部,p->n等于5,p->next指向a[1]。ABD三项返回的都是p->n的值5。答案选择C选项。
更多“若有以下程序段struct st{ int n; struct st*next;};struct st a[3] = {”相关问题
  • 第1题:

    有以下程序: inClude structNODE{ int num; structNODE*next; }; main() {StructN00E

    有以下程序:

    #inClude <stdlib.h>

    struct NODE{

    int num;

    struct NODE *next;

    };

    main()

    { Struct N00E *p,*q,*r;

    int sum;0;

    p=(struct NODE *)malloc(sizeof(struct NODE));

    q=(struct NODE *)malloc(sizeof(struct NODE));

    r=(struct NODE *)malloc(Sizeof(struct NODE));

    p->num=1;q->num=2;r->num=3;

    p->next=q;q->next=r;r->next=NULL;

    sum+=q->next->num;sum+=p->num;

    printf("%d\n",sum);

    }

    执行后的输出结果是

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:本题中定义了一个结点structNODE,在主函数中定义了三个结点变量指针p、q和r,接着通过malloc函数分配了三个结点并让p、q和r分别指向他们,再接着给p、q和r所指向的结点的hum域赋值为1、2、3,然后让结点p指向q,让q指向r,r指向NULL。显然q->next->num的值为指针r所指向结点的num域的值为3,p->num的值为指针p所指向结点的num域的值为1,故最后输出s的值为3+1=4。所以,4个选项中选项B符合题意。

  • 第2题:

    下列程序的输出结果是()。includemain(){struct st{int y,x,z;};union{long i; int j;

    下列程序的输出结果是( )。 #include<stdio.h> main() { struct st { int y,x,z; }; union { long i; int j; char k; }un; printf("%d,%d\n",sizeof(struct st),sizeof(un)); }

    A.6,2

    B.6,4

    C.8,4

    D.8,6


    正确答案:B
    解析: 本题主要考查结构体和联合内存使用的区别:结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立;联合所占用的内存空间为最长的成员所占用的空间。

  • 第3题:

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

  • 第4题:

    若有以下说明和语句: 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。

  • 第5题:

    有以下程序: include struct NODE{ int num; struct NODE*next; } main() {structNOD

    有以下程序:

    #include<stdlib.h>

    struct NODE{

    int num;

    struct NODE *next;

    }

    main()

    { struct NODE *p,*q,*r;

    int sum=0;

    p=(struct NODE *)malloc(sizeof(struct NODE));

    q=(Struct NODE *)malloc(sizeof(struct NODE));

    r=(Struct NODE *)malloc(sizeof(struct NODE));

    p->num=1; q->num=2; r->num=3;

    p->next=q; q->next=r; r->next=NULL;

    sum+=q->next->num;sum+=p->num;

    printf("%d\n",sum);

    }

    执行后的输出结果是( )。

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:本题中定义了一个结点结构stmct NODE,在主函数中定义了3个结点指针p、q和r,接着通过malloc函数分配了3个结点并让p、q和r分别指向他们,再接着给p、q和r所指向的结点的num域赋值为1、2、3,然后让结点p指向q,让q指向r, r指向NULL。显然q->next->num的值为指针r所指向结点的hum域的值为3,p->hum的值为指针p所指向结点的num域的值为1,故最后输出s的值为3+1=4。所以,4个选项中选项B符合题意。

  • 第6题:

    有以下程序 include struct NODE{ int num; struct NODE *next;}; main( )

    有以下程序

    #include <stdlib.h>

    struct NODE{

    int num;

    struct NODE *next;};

    main( )

    { struct NODE *p,*q,*r;

    int sum=0;

    p=(struct NODE *)malloc(sizeof(struct NODE));

    q=(struct NODE *)malloc(sizeof(struct NODE));

    r=(struct NODE *)malloc(sizeof(struct NODE));

    p->num=1;q->num=2;r->num=3;

    p->next=q;q->next=r;r->next=NULL;

    sum+=q->next->num;sum+=p->num;

    printf(“%d\n”,sum);}

    执行后的输出结果是

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:q—>next—>num=3,p—>num=1,所以结果为4。

  • 第7题:

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

  • 第8题:

    若有以下定义和语句 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是一个定义过的指向结构体变量的指针,则用它指向结构体变量的某一个成员,编译时将指出地址的类型不匹配。

  • 第9题:

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

  • 第10题:

    有以下程序 include struct NODE {int num;struct NODE*next;} main() {struct NODE

    有以下程序

    #include<stdlib.h>

    struct NODE

    {int num;struct NODE*next;}

    main()

    {struct NODE *P,*q,*r;

    p=(struct NODE *)malloc(sizeof(struct NODE));

    q=(struct NODE *)malloc(sizeof(struet NODE));

    r=(struct NODE*)malloc(sizeof(struct NODE)):

    p->num=10;q->num=20;r->num=30;

    p->next=q;q->next=r;

    printf("%d\n",p->num+q->next->num):

    }

    程序运行后的输出结果是( )

    A.10

    B.20

    C.30

    D.40


    正确答案:D

  • 第11题:

    有以下程序 inGlude struct NODE { int num; struct NODE *next; } main() {struct N

    有以下程序

    #inGlude<stdlib.h>

    struct NODE {

    int num;

    struct NODE *next;

    }

    main()

    { struct NODE *p,*q,*r;

    int sum=0;

    p=(struct NODE*)malloc(sizeof(struct NODE));

    q=(struct NODE*)malloc(sizeof(struct NODE));

    r=(stnlct NODE*)malloc(sizeof(struct NODE));

    p->num=1;q->num=2;r->num=3;

    p->next=q;q->next;r;r->next=NULL;

    sum+=q->next->Num,sum+=p->num;

    printf("%d\n",sum);

    }

    执行后输出结果是

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:本题中定义了一个结点struct NODE,在主函数中定义了三个结点变量指针p、q和r,接着通过malloc函数分配了三个结点并让p、q和r分别指向他们,再接着给p、q和r所指向的结点的num域赋值为1、2、3,然后让结点p指向q,让q指向r,r指向NULL。显然q->next->num的值为指针r所指向结点的num域的值为3,p->hum的值为指针P所指向结点的num域的值为1,故最后输出s的值为3+1=4。

  • 第12题:

    单选题
    有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2},b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是(  )。
    A

    ++pt->x

    B

    pt->x

    C

    *pt->y

    D

    (pt++)->x


    正确答案: D
    解析:
    pt->x值为10,->优先级高于++,前置++表达式的值为加1之后的值,答案选择A选项。

  • 第13题:

    以下程序的输出是______。 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。

  • 第14题:

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


    正确答案:B

  • 第15题:

    下列程序的输出结果是( )。 include main() { struct st { int y,x,z; }; union {long

    下列程序的输出结果是( )。 #include <stdio.h> main() { struct st { int y,x,z; }; union { long i; int j; char k; } un; printf("%d,%d\n",sizeof(struct st),sizeof(un)); }

    A.6, 2

    B.6, 4

    C.8, 4

    D.8, 6


    正确答案:B
    解析:本题主要考查结构体和联合内存使用的区别:结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立;联合所占用的内存空间为最长的成员所占用的空间。

  • 第16题:

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

  • 第17题:

    若有以下说明和语句: 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。

  • 第18题:

    若有下列说明和语句,已知int型数据占2个字节,则下列语句的输出结果是( )。 struct st { char a[15]; int b; double c; }; printf("%d",sizeof (struct st));

    A.15

    B.8

    C.25

    D.2


    正确答案:C
    解析:本题主要考查结构体的内存使用:对结构体而言,结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立。题中int b占2个字节,char a[15]占15个字节,double c占8个字节,所以共25个字节。

  • 第19题:

    设有以下语句 ( ) 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

  • 第20题:

    有以下程序: include struct NODE { int num; struct NODE*next; }; main() { struct

    有以下程序:

    #include <stdlib.h>

    struct NODE

    { int num; struct NODE *next; };

    main()

    { struct NODE *p,*q,*r;

    p=(struct NODE*)malloc(sizeof(struct NODE));

    q=(struct NODE*)mallloc(sizeof(struct NODE));

    r=(struct NODE*)malloc(sizeof(struct NODE));

    p->num=10;q->num=20; r->num=30;

    p->next=q;q->next=r;

    printf("%d\n",p->num+q->next->num);

    }

    程序运行后的输出结果是( )。

    A.10

    B.20

    C.30

    D.40


    正确答案:D
    解析:本题在主函数中首先定义了3个结构体指针变量p,q,r。然后调用内存分配函数分别为其分配地址空间,程序中变量p->num的值为10,指针变量q->next指向指针变量r,r->num的值为30,所以变量q->next->num的值为30,因此,表达式p->num+q->next->num的值为10+30=40。所以4个选项中D正确。

  • 第21题:

    在以下程序段中,已知血型数据占两个字节,则输出结果是 union un { int i; double y; } struct st { char a[10]; union un b; }; printf("%",sizeof(struct st));

    A.14

    B.18

    C.20

    D.16


    正确答案:B
    解析:本题考查了结构体和共用体类型的特点。结构体变量的各个数据成员分别占据不同的存储空间,而共用体变量的数据成员共同占据一段存储空间。所以共用体un的变量占8个字节,而结构st中,变量所占据的存储空间为成员a和b的存储空间之和,所以答案为B。

  • 第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题:

    有以下程序: include struct NODE{int nurn;struct NODE *next; }; main() { struct

    有以下程序:

    #include <stdlib.h>

    struct NODE{

    int nurn;

    struct NODE *next;

    };

    main()

    { struct NODE *p,*q,*r;

    int sum=0;

    P=(struct NODE*)malloc(sizeof(struct NODE));

    q=(struct NODE*)malloc(sizeof(struct NODE));

    r=(struct NODE*)malloc(sizeof(struct NODE));

    p->num=1;q->num=2;r->num=3;

    p->next=q;q->next=r;r->next=NULL;

    sum+=q->next->num;sum+=p->num;

    Printf("%d\n",sum);

    }

    执行后的输出结果是( )。

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:本题中定义了一个结点structNODE,在主函数中定义了三个结点变量指针p、q和r,接着通过malloc函数分配了三个结点并让p、q和r分别指向他们,再接着给p、q和r所指向的结点的num域赋值为1、2、3,然后让结点p指向小让q指向r,r指向NULL。显然q->next->num的值为指针r所指向结点的num域的值为3,p->num的值为指针p所指向结点的num域的值为1,故最后输出s的值为3+1=4。所以,4个选项中选项B符合题意。