偶见c++面试题一份分享

1、头文件中的 ifndef/define/endif 干什么用?

防止该头文件被重复引用如果头文件被重复引用了,根据文件的内容有不同的后果,比如重复定义。

例:可以用来预防多重包含同一头文件
#ifndef SALESITEM_H
#define SALESITEM_H
#endif
#ifndef指示检测预SALESITEM_H处理器变量是否未定义,如果未定义,那么后面所有的指示全被处理直到出现#endif。

2、#include 和 #include “filename.h” 有什么区别?

#include 引用标准库的头文件(从标准库目录开始搜索);直接从库中查找。
#include “filename.h” 引用非标准库的头文件(从用户工作目录开始搜索)先在当前位置查找,如果没有找到在从库中查找。

3、const 有什么用途?(请至少说明两种)

(1)可以定义 const 常量;
(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护, 可以预防意外的变动,能提高程序的健壮性。

4、在C++ 程序中调用被C编译器编译后的函数,为什么要加 extern“C”声明?

作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。

5、在用到malloc()函数时要加那个头文件?

#include 和 #include。

6、请写出 BOOL flag 与“零值”比较的 if 语句:
请写出 float x 与“零值”比较的 if 语句:
请写出 char *p 与“零值”比较的 if 语句:

bool a;
if(a) { // }
if(!a){ // }

int a;
if(a==0)
{
//
}
if(a!=0)

float a;
const float eps=0.000001;
if((a>=-eps) && (a<=eps) )
{
//
}
if ( var >= eps|| var <= -eps)
{
//
}

=======
int *a;
if(a==NULL)
{
//
}

7、已知strcpy函数的原型是

char *strcpy(char *strDest, const char *strSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函数 strcpy

(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?

//为了实现链式操作,将目的地址返回,加3分!
//将源字符串加const,表明其为输入参数,加2分
char * strcpy( char *strDest, const char *strSrc )
{

//对源地址和目的地址加非0断言,加3分
assert( (strDest != NULL) && (strSrc != NULL) );//如果它的条件返回错误,则终止程序执行

while( (*strDest++ = * strSrc++) != ‘\0’ );
char *address = strDest;
return address;
}

猜你喜欢

转载自blog.csdn.net/weixin_49249294/article/details/108908060
今日推荐