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

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

A、10

B、11

C、20

D、21

参考答案和解析
正确答案:B
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下程序includestruct STU{char name[10];int num;};void f(char*name, intnum){s

有以下程序 #include <string.h> struct STU { char name[10]; int num; }; void f(char *name, int num) { struct STU s[2]={{"SunDan",20044},{"Penghua",20045}}; num=s[0].num; strcpy(name,s[0].name); } main() { struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p; p=&s[1]; f(p->name,p->num); printf("%s %d\n",p->name,p->num); } 程序运行后的输出结果是

A.SunDan 20042

B.SunDan 20044

C.LiSiGuo 20042

D.YangSan 20041


正确答案:A
解析:题目中定义的函数f()包含两个参数,一个字符指针,—个整型变量。当修改参数指针所指向的内容的时候,实参所指的内容也被修改,即传址调用;但只是修改参数变量的内容,则实奉不受影响,即传值调用。因此,主函数调用f()函数后,第1个参数被修改成函数中s[0]的name成员,第2个参数不受影响,还是主函数中s[1]的num成员。故最终输出SunDan20042。应该选择A。

第2题:

有以下程序}

struct s

{ int x,y; } data[2]={10,100,20,200};}

main( )}

{ struct s *p=data;}

printf("%d\n",++(p->x));}

程序运行后的输出结果是

A.10

B.11

C.20

D.21


正确答案:B
解析:data数组中共有两个元素,指针变量p所指的单元为数组的第一个存储单元,该单元中存储了数组中的第一个元素。故p->x值为10,++(p->x)值为11。

第3题:

有以下程序

#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

第4题:

有以下程序:includestruct tt{int x;struct tt*y;}*p;struct tt a[4]={20,a+1,15,a+2,

有以下程序: #include<stdio.h> struct tt {int x;struct tt*y;}*p; struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a} main() { int i; p=a; for(i=1;i<=2;i++){printf("%d",p->x);p=P->y;} } 程序的运行结果是( )。

A.20,30,

B.30,17

C.15,30

D.20,15


正确答案:D
解析:本题考查的重点是对结构体的运用与理解。在a[4]的初始化中,相当于将其生成为一个链表,故打印两次相当于将前两个整数值打印出来.因此选项D是正确的。

第5题:

有以下程序 include struct tt { int x; struct tt *y; } *p; s

有以下程序 #include <stdio.h> struct tt { int x; struct tt *y; } *p; struct tt a[4]= {20,a+ 1,15,a+2,30,a+3,17,a}; main() { int i; p=a; for(i=1; i<-2; i++) { printf("%d,", p->x ); p=p->y; }

A.20,30,

B.30,17

C.15,30,

D.20,15,


正确答案:D
解析:题目中定义了一个全局结构体数组a,结构体中包含两个成员:一个int型变量x和一个自身类型指针y。所以,结构体数组a的初始化列表中每两个初始化一个结构体元素。主函数通过一个for循环,连续调用了两次输出函数printf(),每次输出p所指元素的x成员值。p初始化时指向数组 a的首地址,即a[0]的位置,所以第1次输出的值为20。然后又将a[0]的成员y的值赋给p,y在初始化时是a+1,所以p在第2次输出时指向的元素是a[1],故第2次输出的值为15。所以本题最终输出结果是“20,15,”,应该选择D。

第6题:

有以下程序 include typedef struct { int num;double s; }REC; void funl(REC *x) { x

有以下程序 include<stdio.h> typedef struct { int num;double s; }REC; void funl(REC *x) { x->num=23;x->s=88.5; } void main() { REC a={16,90.0}; fun1(&A); printf("%d\n",a.num); } 程序运行后的输出结果是( )。


正确答案:23
23

第7题:

有以下程序: include struct STU (char name[10]; int num; };

有以下程序: #include <string.h> struct STU (char name[10]; int num; }; void f(char *name, int num) {struct STU s[2]={{"SunDan",20044}.{"Penghua",20045}}; num=s[0].num; strcpy(name,s[0].name); } main() {struct STU s[2]={{"YangSall",20041},{"LiSiGao",20042}},*p;p=&s[1]; f(p->name,p->num); printf("%s%d\n",p->name,p->num); } 程序运行后的输出结果是 ______。

A.SunDan 20042

B.SunDan 20044

C.LiSiGuo 20042

D.YangSan 20041


正确答案:A
解析:本题主函数中定义了结构体类型的指针变量p,并使其指向了结构体类型的数组s[1],并通过调用函数f改变了指针变量p所指向的结构体中成员变量name的值,但并未改变其num的值。这是因为函数f中的形参name是一个字符型指针变量,它指向了主函数中指针变量p所指向的结构体的成员变量name,所以对函数f中的形参*name的改变也就是刘主函数中p->name的改变,而函数f中对形参num的改变并不会影响主函数中p->num的值,因为此时传递给num的是一个值,而不是地址。

第8题:

有以下程序:struct s{ int x,y; }data[2]={10,100,20,200};main(){ struct s *p=data;printf("%d\n",(++p)->x);}程序运行后的输出结果是( )。A.10 B.11 C.20 D.21


正确答案:C
结构体;struct s *p=data; 使p指向data的首地址,而++p->x,先使p指向下一位即20,然后输出其值。

第9题:

下列程序的输出结果是( )。 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
解析:本题主要考查结构体和联合内存使用的区别:结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立;联合所占用的内存空间为最长的成员所占用的空间。

第10题:

有以下程序includestruct ord{ int x,y;} dt[2]={1,2,3,4};mare(){struct ord*p=dt; p

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

A.1,2

B.2,3

C.3,4

D.4,1


正确答案:B
解析:本题主要考查了结构体变量成员的引用,有三种形式来引用结构体变量中的成员:(1)结构体变量名.成员名:(2)指针变量名->成员名;(3)(*指针变量名).成员名。其中点号“.”称为成员运算符;箭头“->”称为结构指向运算符。由于p->x指向了结构体的的成员x,而结构体中x的值为1,因此自增后变为2,p->y指向了结构体的成员y,而结构体中y的值为2,因此自增后变为3,因此,选项B是正确的。

更多相关问题