笔试
可以参考:https://www.cnblogs.com/wft1990/p/6545446.html
以下仅是回忆起的题目
1 回答下面的问题(6分)
(1).Void GetMemory(char **p, int num){
*p = (char *)malloc(num);
}
void Test(void){
char *str = NULL;
GetMemory(str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:输出“hello”
(2). void Test(void){
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL){
strcpy(str, “world”);
printf(str);
}
}
请问运行Test 函数会有什么样的结果?
答:输出“world”。
这里仔细理解下free的意义,free函数只是释放指针指向的内容,而该指针仍然指向原来指向的地方(str != NULL),
此时,指针为野指针,如果此时操作该指针会导致不可预期的错误。安全做法是:在使用free函数释放指针指向的空间之后,将指针的值置为NULL。
(3). char *GetMemory(void){
char p[] = "hello world";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:无效的指针,输出不确定
2 编写strcat函数(6分)
已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。
(1)不调用C++/C 的字符串库函数,请编写函数 strcat
答:
VC源码:
char * __cdecl strcat (char * dst, const char * src)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
(2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?
答:方便赋值给其他变量
参考:https://www.cnblogs.com/zkfopen/p/11059521.html
3 int i=10, j=10, k=3; k*=i+j; k最后的值是?
答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低
4 写出float x 与“零值”比较的if语句。
答:if(x>-0.000001 & x<0.000001)
printf("x 是零\n");
5 堆栈溢出一般是由什么原因导致的?
答:没有回收垃圾资源。
6 多态的作用
答:1 不必编写每一子类的功能调用,可以直接把不同子类当父类看,屏蔽子类间的差异,提高代码的通用率/复用率 。
2 父类引用可以调用不同子类的功能,提高了代码的扩充性和可维护性。
7 进程通信方法及线程同步机制区别
答:参考:https://blog.csdn.net/eulb/article/details/2177500
8 为什么构造函数没有返回值?构造函数失败怎么处理?
答:https://blog.csdn.net/tangaowen/article/details/1818819
https://blog.csdn.net/wind19/article/details/8213114
9 数字字符串转换成这个字符串对应的数字(十六进制)
要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整数。如果字符串参数包含任何非数字字符,函数就返回零。不必担心算数溢出。
答:https://www.cnblogs.com/zkfopen/p/11060685.html
面试
1 虚函数的作用,虚函数的实现原理
答:https://www.cnblogs.com/zkfopen/p/11061414.html
2 什么是野指针?野指针的危害?如何避免野指针?
答:野指针是随机指向一块内存的指针,野指针不是NULL指针。
野指针可能会造成内存泄露的危害。(注意:野指针不会一定造成内存泄露,如果该野指针指向的内存刚好是某个变量的地址,那么野指针也能使用这块内存)。
我们要在以后养成良好的编码习惯:
1.将没有指向的指针初始化指向NULL(指向NULL的指针不能对他的指向进行修改)
2.当想给一个指针指向的空间赋值时,一定要给这个指针分配空间(malloc)
3.当空间分配完后,要检查这个指针的空间是否分配成功
4.当空间分配完后,要先将这块内存初始化(memset,bzeor)
5.当这块内存使用完后,必须将这块内存释放(free)
6.释放完空间后,将指针再次指向NULL(防止这个指针再次成为野指针)
3 对代码规范的理解
答: