一、不定项选择题
以下程序都是基于32位little endian系统
1、下面的代码输出是多少:B
union{
int i;
char x[2];
}a;
void main(){
a.x[0]=10;
a.x[1]=1;
printf("%d",a.i);
}
A.1 B.266 C.1 D.2561
分析:
a.x[0] = 10 ========================> (|0|0|0|0|1|0|1|0|)
a.x[1] = 1 ======================> (|0|0|0|0|0|0|0|1|)
公用体公用sizeof(int)长度即4字节32为,则赋值后共用体内存为
a: (|0|0|0|0|0|0|0|0|)(|0|0|0|0|0|0|0|0|)(|0|0|0|0|0|0|0|1|)(|0|0|0|0|1|0|1|0|)
a.i 为4字节整型
则 i = 2^8 + 2^3 + 2^1 = 256 + 8 + 2 = 266
2、指出下面代码的输出结果:B
int foo(int x,int y){
if(x<=0||y<=0)
return 1;
return 3*foo(x-1,y/2);
}
printf("%d\n",foo(3,5));
A.81 B.27 C.9 D.3 E.1
3、指出下面代码的输出结果:C
void main(){
int a[5]={
1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d %d",*(a+1),*(ptr-1));
}