1、以下哪个选项一定可以将flag的第二个bit置0
-
flag&=~2
-
flag|=2
-
flag^=2
-
flag>>=2
|:只要有一个1即为1
&:同为1时才为1
^:两个数相同时为1,不同为0
~:取反
>>:右移
2转化为二进制:0010,第二位为1
分析选择A
2、请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以被改变。
-
const int const *x = &y;
-
int * const x = &y;
-
const int *x = &y;
-
int const *x = &y;
-
const int * const x = &y;
const在*前,指针指向空间的值不能修改
const在*后,指针的指向不能修改
3、在上下文和头文件正常的情况下,以下C语言指令:
int a[5] = {1,3,5,7,9};
int *p = (int *)(&a+1);
printf("%d,%d",*(a+1),*(p-1));
运行结果是什么?
数组名只有在&与sizeof的后面,表示的是数组本身,指针p指向的是9之后
4、 以下程序的输出结果是:
#include <iostream>
using namespace std;
void func(char **m){
++m;
cout<<*m<<endl;
}
int main(){
static char *a[]={"morning", "afternoon", "evening"};
char **p;
p=a;
func(p);
return 0;
}
m指向的是morning
向后偏移一个元素大小,即为afternoon
5、求函数返回值,输入x=9999
int func(int x){
int count = 0;
while (x){
count++;
x = x&(x - 1);//与运算
}
return count;
}
该函数功能实际上就是求一个数转化为二进制后之中1的个数,所以为8
6 、下列程序执行后,输出的结果为()
#include <stdio.h>
int cnt = 0;
int fib(int n) {
cnt++;
if (n == 0)
return 1;
else if (n == 1)
return 2;
else
return fib(n - 1) + fib(n - 2);
}
void main() {
fib(8);
printf("%d", cnt);
}
-
41
-
67
-
109
-
177
cnt实际在统计斐波那契数列递归的次数
F0:1次
F1:1次
F2:F0+F1=3次
F3:F2+F1=1+1+3=5次
F4:F3+F2=1+5+3=9次
F5:F4+F3=1+9+5=15次
F6:F5+F4=1+15+9=25次
F7:F6+F5=1+25+15=41次
F8:F7+F6=1+41+25=67次