一、选择题:
1、若有说明: int a[10];则对数组元素的正确引用是( )
A. a[10] B. a[3.5] C. a(1) D. a[10-10]
答案:D
详解:
A、数组定义时[ ]中的值代表数组中所能存放的最多元素个数,而我们在使用时[ ]中代表的是数组的下标,数组下标的范围是0到最多元素个数减1,因此对于数组a来说,最后一个元素应该为9,如果访问a[10],则会出现访问越界的问题;
B、数组下标必须为整数;
C、访问数组中的值需要使用数组名加[ ];
2、假定a为—个整型数组名,则元素a[4]的地址为( )
A. a+4 B. a+8 C. a+16 D. a+32
答案:C
详解:
数组名代表的是数组首元素的地址,由于该数组中的元素为int类型,int类型占4个字节,而a[4]代表的是数组中第五个变量,其数据存储形式如下图所示:
故,a[5]的地址为a+16
3、如果x=254,函数的返回值为( )
int func(int x){
int countx = 0;
while(x){
countx++;
x = x & (x - 1);
}
return countx;
}
A.6 B.7 C.8 D.0
答案:B
详解:
该段程序的返还值为函数形参x的二进制中有多少1,输入x为255,我们知道x=256时,二进制的高位第9位为1,其余为0,减1后255为8个1,则254中有7个1,详见下图:
4、根据以下声明,使用不合法的是( )
int f1(float);
int f2(char);
int f3(float);
int f4(float);
int (*pf)(float);
A.int (*p)(float) =&f1;
B.pf = &f4;
C.pf = &f2;
D.pf = f3;
答案:C
详解:
A、该选项定义了一个函数指针,指针名为p,用于存放函数的地址,那么传入到其中的函数的返还值类型应为int,而返还值应该为float,那么传入其中的f1无论是返还值还是传入值均没有问题;
B、pf也是函数指针,传入到其中的函数的返还值类型应为int,而返还值也应该为float,f4符合其要求,故传入f4的地址没问题;
C、这里f2的传入值为char型与函数指针pf的传入值类型不同,故不合法;
D、同B;
5、设有如下的程序段,执行后输出结果为( )
#include <stdio.h>
void function(int a,int b,int c){
c = a * b;
}
int main(void){
int c = 0;
function(10, 20, c);
printf("%d", c);
return 0;
}
A、200;
B、100;
C、20;
D、0;
答案:D
详解:
我们在主函数中定义了一个局部整形变量c赋值为0,调用函数function(),并传入了3个形参,a=10,b=20,c=0,进入到函数function()中,局部变量c = a * b,这里的局部变量c和主函数中的局部变量c是两个变量,函数结束后,function()中的局部变量c的生命周期已经结束了,其中的值被释放,回到主函数中,主函数中的局部变量c的生命周期还未结束,