**
记一次失败的面试
**
2020.3.19 天晴
“你的专业排名是多少?”
“**%。”
“你上过什么编程相关的课程?”
“C语言,汇编,微机原理,计算机控制技术,单片机原理。”
“最熟悉的是什么?” //担心答不上,还贴心地问最擅长什么
“C语言。”
“那说一下变量的生命周期。”
“全局变量……局部变量……”
“说下static全局和局部。”
“static……”
“说下宏?”
“宏……”
“在编译前会对宏进行什么操作?”
“?” //概念都记不清,我太菜了
“先写一个结构体吧,里面包含两个整形,一个字符数组。”
“OK”
struct one{
int a;
int b;
char c[6];
};
“求结构体中字符数组c相对结构体的偏移量。” //问题来了
我:而结构体内元素的偏移量,啥?
看似稳如老狗,实则慌不择路地写下代码,然后在老师教学生般的指导下把代码改成了这样:
typedef struct one aa;
int move(){
struct one *p;
int x;
p=(aa*)malloc(sizeof(aa));
x=(p->c)-(&p->a);
return x;
}
结果还是错的,但这就是最终版本了。
/* 不用编译器试错,我也很很绝望啊,往日敲代码都是敲完编完再改的。(原来这就是我菜的借口) */
听完问题的一瞬间我就明白了——是我没玩过的。我知道天生我菜必有用,没想到紧张让我菜上加菜。
然后就是面试官询问我擅长的其他项目,试图抢救一下。
然而我却不解风情地在原地自裁的路上越走越远。
然后就没有然后了。
我们问好后依依惜别。
直到那一瞬我才明白了事情的严重性。
原来,这就是结局了。
“说好的做题呢???”我心里大大的问号。
明白事实,在一切结束之后:“哦,原来做过了。这么简单的题目都做不来,救不了的。”
确实,这么简单,救不了的啊
很快就收到了凉凉的短信。
把编译器打开呼吸节奏渐渐地平缓。
是啊,就这么简单。
在一瞬间我想到了两种可能。
法1:指针强制类型转换,相减 。
法2:结构体总长减字符数组占位。
//定义结构体
typedef struct one{//之后程序中,若定义struct变量,C语言下struct不能省略,c++语言下可以省略struct
int a;
int b;
char c[CL];
}one;
//
//方法一:指针强制类型转换,相减
void roadOne(one *p){
long long n;
n=(long long)p->c-(long long)&p->a;//64位系统,指针为8位 ,故强制转换为long long
printf("方法一:指针强制类型转换,相减 ,字符数组的偏移量为:%lld\n",n);
}
//
//方法二: 构体总长减字符数组占位
void roadTwo(one *p,int length,int cLength){
int n;
if(cLength%4==0)//若整除4,则字符数组长度等于其在结构体中的占位
n=length-cLength;
else//否则不足4位,补足 4位
n=length-4*(cLength/4+1);
printf("方法二:结构体总长减字符数组占位,字符数组的偏移量为:%d\n",n);
}
简单得我像是弱智。
还有百度到的法3:使用offsetof()。
//方法三:使用offsetof()
void roadThree(){
int n;
n=offsetof(one,c);//求偏移量函数,输入为结构体名和其中变量名
printf("方法三:使用offsetof(),字符数组的偏移量为:%d\n",n);
}
awsl
However, everything that kills me makes me feel alive!
言而总之,这次失败的面试告诉我:
请用 "我选择,我负责,我想办法"
替代 “我不知,我害怕,我选择放弃” !!!
“去解题吧!就像所有问题都有答案一样!”
(经验+0.5,当前经验值1.5。)