1、头文件中的 ifndef/define/endif 干什么用?
防止该头文件被重复引用如果头文件被重复引用了,根据文件的内容有不同的后果,比如重复定义。
例:可以用来预防多重包含同一头文件
#ifndef SALESITEM_H
#define SALESITEM_H
#endif
#ifndef指示检测预SALESITEM_H处理器变量是否未定义,如果未定义,那么后面所有的指示全被处理直到出现#endif。
2、#include <filename.h> 和 #include “filename.h” 有什么区别?
#include <filename.h> 引用标准库的头文件(从标准库目录开始搜索);直接从库中查找。
#include “filename.h” 引用非标准库的头文件(从用户工作目录开始搜索)先在当前位置查找,如果没有找到在从库中查找。
3、const 有什么用途?(请至少说明两种)
(1)可以定义 const 常量;
(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,
4、在C++ 程序中调用被C编译器编译后的函数,为什么要加 extern“C”声明?
作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。
5、在用到malloc()函数时要加那个头文件?
#include<stdlib.h> 和 #include<malloc.h>。
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;
}