41.什么是预编译,何时需要预编译?
答案:
1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
42.用两个栈实现一个队列的功能?要求给出算法和思路!
答案:设2个栈为A,B, 一开始均为空.
入队:
将新元素push入栈A;
出队:
(1)判断栈B 是否为空;
(2)如果不为空,则将栈A中所有元素依次pop 出并push到栈B;
(3)将栈B 的栈顶元素pop 出;
详解:队列:先进先出,栈:先进后出
43.对于一个频繁使用的短小函数,在C 语言中应用什么实现,在C++ 中应用什么实现?
答案:c用宏定义,c++ 用inline
44.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
答案:#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
详解:UL无符号长整形
45.Typedef 在C 语言中频繁用以声明一个已经存在的数据类型的同义字。
也可以用预处理器做类似的事。例如,思考一下下面的例子:
#define dPS struct s*
typedef struct s* tPS;
以上两种情况的意图都是要定义dPS 和tPS 作为一个指向结构s指针。
哪种方法更好呢?(如果有的话)为什么?
答案:第二种更好,因为在实际替换中可能出现意想不到的问题。
如:
dPS p1,p2;
tPS p3,p4;
第一个扩展为struct s * p1, p2;上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。
46.在 C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
答案:extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。
47.语句for( ; 1 ;) 有什么问题?它是什么意思?
答案:死循环,和while(1)相同。
48.do……while和while……do有什么区别?
答案:前一个循环一遍再判断,后一个判断以后再循环。
49.请写出下列代码的输出内容
#include <stdio.h>
int main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c ,d:%d,%d,%d",b,c,d );
return 0;
}
答案:10,12,120
详解:
b=a++;可以拆解为
b=a;
a++;
所以这一句运行后b=10;a=11;
c=++a;可以拆解为
++a;
c=a;
所以这一句运行后b=10;a=12;c=12;
d=10a++;可以拆解为
d=10a;
a++;
所以最后a=13;b=10;c=12;d=120;
50.
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问p1+5= ;
p2+5= ;
答案:
p1+5=0x801005;
p2+5=0x810014;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)