C/C++试题
1、bool、float、指针变量与"零值"比较的if语句?
答:
bool flag; if(flag),if(!flag)
char *p; if(p==NULL),if(p!=NULL)
float x;
const float EPSILON = 1e-6;
if((x>=-EPSILON)&&(x<=EPSILON)) //(-0.000001~0.000001)
if((x<-EPSILON)&&(x>EPSILON)) //(+INFINITE~0.000001),(-0.000001~-INFINITE)
2、const有什么用途?
答:
(1)可以定义const 常量
(2)const 可以修饰函数的参数、返回值及函数的定义体。被const修饰的东西都受到强制保护,可以预防意外地被修改,能提高程序的健壮性。
3、在C++程序中调用被C编译器编译后的函数,为什么都要加extern "C" ?
答:
C++语言支持函数重载,C语言不支持函数重载。函数被C++编译器编译和被C编译器编译后生成的内部名字是不同的。假设某个函数的原型为:void foo(int x,int y);该函数被C编译器编译后的内部名字为_foo,面C++编译器则会产生像_foo_int_int之类的名字。C++提供了C连接交换指定符号 extern "C" 来解决名字匹配的问题。
4、类型转换:
double d = 100.25;
int x = d;
int *pInt = (int*)&d;
请问以下两个语句输出什么?
cout<< x <<endl;
cout<< *pInt <<endl;
答:
第一个输出 100,x取d的整数部分。
第二个结果不是100,*pInt等于d的前4个字节的数值,而不是d的整数部分。
相关文档:
栈:函数调用的时候,在栈中保存局部变量和函数参数等。当函数返回时,自动清除栈。
自由存储区:也称为堆(heap),可以看作大量的内存段。通过 new 操作符分配的内存在堆中。程序结束之前不自动清除自由存储区。需要由程序来负责释放(delete)。
1.
对指向栈上内存的指针调用delete会导致程序Crash。
2.
new 进 ......
进程I/O函数,与pclose函数一起使用。
表头文件
#include <stdio.h>
函数定义
FILE * popen
( const char * command
, const char * type
);
int pclose
( FILE * stream
);
函数说明
popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一 ......
[注]:最近在做UVC描述符的编辑工具,用到很多的结构,为了方便把结构体写成bin文件,需要把结构体中填充的字节去掉,在网上搜索得到这篇文章,感觉挺好的,转过来做个纪念。
结构体(struct)的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题。先看下面定义的两个结构体.
struct
......
Precedence Operator Description Example Overloadable Associativity
1
::
Scope resolution operator
Class::age = 2;
no
none
2
()
()
[]
->
.
++
--
const_cast
dynamic_cast
static_cast
reinterpret_cast
typeid
Function call
Member initalization
Array access
Member access from ......