面试这个词很有意思,比如”我去面试了“,从这句话中无法弄清楚是你去面试别人,还是你去找工作被别人面试了呢?说笑了。
下面就是我面试(面别人和被别人面)过程中遇到的一些不太实用的方法总结一下:
1. 交换两个数值
方法1: 利用中间变量
// int a, b;
{
...
int tmp=a;
a=b;
b=tmp;
...
}
方法2: 利用异或
// int a, b;
{
...
a^=b;
b^=a;
a^=b;
...
}
方法3 利用加减法
// int a, b;
{
...
a+=b;
b=a-b;
a=a-b;
...
}
这第三种方法,估计很少有人会用,因为它存在溢出的可能性。
2. 某一个程序中有一个初始化的全局static变量,在某一个函数中有一个与之同名的全局初始化的局部static变量,请问如何在这个函数外访问该变量的值。
#include <stdio.h>
static int val = 10;
void fun()
{
static int val = 20;
printf("val in fun() = %d\n", val);
}
int main(int argc, char *argv[])
{
printf("%d\n", *((&val)));
printf("%d\n", *((&val)+1));
++*((&val)+1);
fun();
}
output:
10
20
val in fun() = 21
这道题有意思是利用了编译器将所有的初始化的static,全局的变量放入全局变量区的前提,并利用指针来获取局部val 的方法,主要考察编译器对全局变量的处理方法,以及对指针的灵活运用。可以说在实际的编程过程中它是一点用处也没有。