首页/ 题库 / [单选题]有如下程序段#include "stdi的答案

有如下程序段#include "stdio.h"typedef union{ long x[2]; int y[4]; char z[8];}atx;typedef struct aa { long x[2]; int y[4]; char z[8];} stx;main(){ printf("union=%d,struct aa=%d\n",sizeof(atx),sizeof(stx));}则程序执行后输出的结果是A.union=8,struct aa=8 B.union=8,struct aa=24C.union=24,struct aa=8 D.union=24,struct aa=24

单选题
2022-02-21 15:52
A、union=8,struct aa=8
B、union=8,struct aa=24
C、union=24,struct aa=8
D、union=24,struct aa=24
查看答案

正确答案
B

试题解析
本题主要考查结构体和联合体所占的存储空间。在本题程序中,首先定义了一个联合体,联合体中具有三个成员,它们的类型分别为长整型、整型和字符型。按照C语言的规定,这三种类型的变量所占的存储空间分别为4个字节、2个字节和1个字节。但由于定义的成员都是数组,长整型数组的大小为2,那么需要的总空间为8个字节;整型数组的大小为4,那么需要的总空间为8个字节;字符数组的大小为8,需要的总空间也为8个字节,因此,可以看出三个成员需要的存储空间一样,都为8。根据联合体变量中的所有成员共享存储空间,联合变量的长度等于各成员中最长的长度的特点,我们可知,系统只需为该联合体变量准备8个字节存储空间即可。然后,定义了一个结构体,结构体中的成员类型及数组大小与联合体完全一致,即三个成员所需的空间都为8个字节。但是结构体与联合体不一样的是,结构体不能共享空间,一个结构体变量的总长度是各成员长度之和。因此,该结构体所需的存储空间为24个字节。综上所述,我们可以知道程序中的联合体和结构体所需要的存储空间分别为8个字节和24个字节。因此,用sizeof运算符计算这两者的存储空间,输出的结果应该为union=8,struct aa=24,本题正确答案选B。

标签:
感兴趣题目
有以下程序: #include  main(){  int x;  scanf(%d,&x);  if(x>10) printf(1);  else if(x>20) printf(2);  else if(x>30) printf(3); } 若运行时输入:35<回车>,则输出结果是(  )。
有以下程序:#include <stdio, h>#define f(x) (x * x)main ( ){ int i1 ,i2; i1 = f(8)/f(4) ;i2 =f(4 +4)/f(2 +2); printf("% d,% d " ,i1 ,i2);
有以下程序: #include <stdio.h> struct s { int x,y;} data[2]={10,100,20,200}; main() { struct s *p=data; printf("%d ",++(p->x)); 程序运行后的输出结果是( )。
以下程序的输出结果是 #include<stdio.h> main() { union un{ int i; long k; char c;}; struct byte{ int a; long b; union un c;}r; printf("%d ",sizeof(r));}
以下程序的输出结果是( ) # include<stdio.h> main() { union un{int i; long k; char c; }; struct byte{ int a; long b; union un c; } r; printf("%d ",sizeof(r)); }
下面程序段的输出为 #include"stdio.h" main() { printf("%d ",12<<2);}
有以下程序段 #include<stdio.h> main( ) { . . .while(getchar( )!=\n); . . . } 以下叙述中正确的是( )。
有如下程序: #include <stdio.h> main() { int x=23; do { Printf("%d",x--);} while(! x); } 该程序的执行结果是( )。
有以下程序: #include<stdio.h> main( ) {int X=011; printf("%d ",++x); } 程序运行后的输出结果是( )。
有以下程序: #include <stdio.h> main() { int x=3,y=2,z=1; printf("%d ",x/y&~z); 程序运行后的输出结果是( )。
有以下程序: #include<stdio.h> #define X 5+6 main() {int a=2,c; C=X*2: printf("%d",C); } 程序运行后的输出结果是( )。
有以下程序: #include<stdio.h> main() { int a=1,b=2,c=3,x; x=(a^B)&c;printf("%d ",x); } 程序的运行结果是( )。
相关题目
有以下程序 #include <stdio .h> main () { printf("%d ", NULL); }
有以下程序 #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 ",++p->y); } 程序的运行结果是______。
有以下程序:#include main(){ int sum=0,x=5; do{ sum+=x; } while(!--x); printf(%d,sum);}程序的运行结果是(  )。
以下程序段的输出结果是()
#include
voidmain(){
int i=2;
for(i<=10;)
{i++;
if(i%3==0)printf("%d",i);
elsecontinue;}
}
有以下程序:#include main(){ int x=011; printf(%d,++x);}程序运行后的输出结果是(  )。
有以下程序(其中k的初值为八进制数):#include main(){ int k=011; printf(%d,k++);}程序运行后的输出结果是(  )。
有如下程序段:int x=3,do{ x-=2;cout<<x;}while(!(--x));执行这个程序段的输出结果是( )。
有以下程序:#include main(){ char s[10] = verygood, *ps = s; ps += 4; ps = nice; puts(s);}程序的运行结果是(  )。
有如下程序段#include "stdio.h"typedef union{ long x[2]; int y[4]; char z[8];}atx;typedef struct aa { long x[2]; int y[4]; char z[8];} stx;main(){ printf("union=%d,struct aa=%d\n",sizeof(atx),sizeof(stx));}则程序执行后输出的结果是A.union=8,struct aa=8 B.union=8,struct aa=24C.union=24,struct aa=8 D.union=24,struct aa=24
有以下程序 #include <stdio.h> main() { int x; scanf("%d",&x); if(x<=3); else if(x!=1O) printf("%d ",x); } 程序运行时,输入的值在______范围才会有输出结果。
有以下程序: #include <stdio.h> main() { int a=1,b=2,c=3,x; x=(ab)&c; printf("%d ",x); } 程序的运行结果是( )。
有以下函数:#include main(){ int a=12,c; c=(a<<2)<<1; printf(%d,c);}程序运行后的输出结果是(  )。
有以下程序:#include main(){ int a=3; int b=3; printf(%d, a&b);}程序运行后的输出结果是(  )。
有以下程序:#include int fun(int a,int b){ if(b==0)return a; else return(fun(--a,--b));}main(){ printf(%d,fun(4,2));}程序运行的结果是(  )。
有以下程序:#includestruct S{int a;int *b;};main(){ int x1[] = {3,4},x2[] = {6,7}; struct S x[] = {1,x1,2,x2}; printf(%d,%d,*x[0].b,*x[1].b);}程序的运行结果是(  )。
有以下程序#includeint fun(int a,int b){ return a+b;}main(){ int x = 6,y=7,z = 8,r; r = fun(fun(x,y),z--); printf(%d,r);}程序运行后的输出结果是(  )。
有下列程序: #include<stdio.h> main { int x=0; int y=0; while(x<7 &&++v) { y--; x++;} printf("%d,%d",y,x); } 程序的输出结果是( )。
有以下程序#include main(){ int i=1; i=i^i; printf(%d,i);}程序运行后的输出结果是(  )。
有以下程序:#include #include #include main(){ char*p1,*p2; p1=p2=(char*)malloc(sizeof(char)*10); strcpy(p1,malloc); strcpy(p2,p1+1); printf(%c%c, p1[0], p2[0]);}程序的运行结果是(  )。
有以下程序#include main(){ int x[3][2]={0},i; for(i=0;i<3;i++)scanf(%d,x[i]); printf(%3d%3d%3d,x[0][0],x[0][1],x[1][0]);}若运行时输入:2 4 6<回车>,则输出结果为(  )。
广告位招租WX:84302438

免费的网站请分享给朋友吧