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次