Everything that kills me makes me feel alive!

**

记一次失败的面试

**

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。)

发布了1 篇原创文章 · 获赞 1 · 访问量 20

猜你喜欢

转载自blog.csdn.net/wonlyyh/article/details/104969891
me