今天又收到了上汽零束的电话面试,其实上周五就收到了,但是当时和兄弟们走在北站回学校的隧道里,就约在了周末晚上,结果自己战战兢兢等了两个晚上也没给来电话,反而是今天下午5点多来电话了。躲是躲不过的,那就上了,然后问题感觉就是C语言基础,感觉还行?
下面总结一下他问的问题,总的来说我感觉不难,但是我答得不好,有的点没看到。
讲讲static的用法
我当时思路比较凌乱,就单从C语言的用法上,它就是个静态变量的作用,在程序运行的全局状态都不会释放掉,但是只有当前文件可以访问这一点我紧张没答上来,他提醒了一句我答上来了;然后C++面向对象上我就比较语无伦次地说出了标了static的成员变量或函数是属于类的这么大概个意思,他大概懂了,表示还不错。😂
总的来说还行,就是我太紧张了。
sizeof是个函数还是关键字,它必须带括号吗,它获取变量的大小是在编译时还是运行时
sizeof当然不是函数是关键字,用途就是获取变量名或数据类型的大小,他唬了我一下说必须要带括号吗,我有点蒙了说不用啊,然后他说他唬我的……自己回去翻了一下,单纯的数据类型是要加括号的,但是变量名可以不加,但是大部分人也不没事找事了,基本上都加了。然后问我获取大小的时间,那我虽然没研究过,但还是觉得是编译时,他说对了。
总之还是不难,是我紧张外加菜。
void*指针大小
指针的大小不就是和系统有关吗,64位的8字节,32位的砍一半。
这个问题基本上是和上一个问题连着的,也没啥。
有几种申请内存的方法,申请内存在哪里申请,然后free为啥不用传内存大小就能释放,收到NULL咋办
这个题我很麻。因为我就知道一个malloc,没了然后我还傻了吧唧的答memset,还好他耳误听成了malloc,然后我们就这个函数扯了起来,然后就提出了free()为啥不用传内存大小就能释放,收到NULL,free()会做什么。
首先我扯了个memset上去,那当然不对了,memset撑死了就是给内存设定内容的,只不过大多数情况下填个0当置空来用。申请内存以我的眼界只知道动态申请内存都是在堆上申请的,他说不对,也有不是的。然后别的我也答不上来,很麻。就那个free()为啥不用传大小,那不用传啊,它不是参数就是内存的指针吗?然后传个NULL进去,free()什么都不做。当然这些都是我下来自己man了一下学到的。他说这块算是进阶内容了,你不懂可以理解。😂
申请内存的函数总结:
//来自stdlib.h
void *malloc(size_t t)//填入一个单位是字节的参数即可,返回一个指向申请内存的指针,内存不会初始化,置空得自己干
void *calloc(size_t a,size_t b)//申请一段a个×b字节的大小的连续内存,返回值同上,内存会初始化为0
//上边两个函数在参数结果是0的时候返回NULL或者一个特定的指针,能让free()顺利处理掉
void *realloc(void *ptr,size_t t)//给一个已经存在的指针内存扩展或者缩小内存,ptr原来内存有的东西不动,t的大小比之前大的话,大的部分也不会初始化。ptr必须是之前函数返回过的一个指向内存的指针,为NULL的话,函数等价于malloc,t为0且ptr不为空的话,函数等价于free()
void free(void *ptr)//释放ptr指向的内存,NULL的话什么都不做
//来自alloca.h
void *alloca(size_t t)//在栈上申请内存,内存会自动释放,所以不用担心内存泄漏
总的来说,没研究过,压根不懂,溜了溜了。
了解atoi函数吗,然后设计一个atoi函数
atoi不就是字符串转数字吗,这个我倒是写过,当时是直接用ASCII码做一下加减运算然后输出这么做的,然后他问我你还记得数字的ASCII码吗?抱歉,忘了。然后呢,我又掏出了我C++的知识(之前看y总算法基础课的时候处理过string类型的单个元素转int,直接减个‘0’),但是我脑抽了。说减个’\0’,反正他也理解了,说在C语言里这么做也可以。就是我’\0’大概记错了,下来好好查查。
48:对应0
65:对应’A’
97:对应’a’
忘了,尴尬。
END
最后问了问我有offer吗,我说都在走流程,然后又说了说自己考研没上的情况,然后聊了聊学校和初试没过。他说专业面过了让我等HR通知,说实话比较梦幻,感觉和我想象中差别略大。但是只要offer没到手,我就永远都是没有着落,战战兢兢地情况。总的来说有个地方能收我,工资过得去,能养活自己就可以了,我一定会深钻技术,当个技术人的……
卑微,太卑微了……明天还有两个面试,只能说尽人事,听天命了……