1、C/C+系列一 1. static 有什么用途?(请至少说明两种)答 、1.限制变量的作用域。2.设置变量的存储域。2. 引用与指针有什么区别?答 、1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。3. 描述实时系统的基本特性答 、在特定时间内完成特定的任务,实时性与可靠性。4. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?答 、全局变量储存在静态数据区,局部变量在堆栈中。5. 什么是平衡二叉树?答 、左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于 1。6. 堆栈溢出一般是由
2、什么原因导致的?答 、没有回收垃圾资源7. 什么函数不能声明为虚函数?答 、constructor8. 冒泡排序算法的时间复杂度是什么?答 、O(n2)9. 写出 float x 与“零值”比较的 if 语句。答 、if(x0.000001a=10;b=a+;c=+a;d=10*a+;printf(“b,c,d:%d,%d,%d“,b ,c,d );return 0; 答 、10,12 ,12021、 static 全局变量与普通的全局变量有什么区别?static 局部变量和普通局部变量有什么区别?static 函数与普通函数有什么区别?答 、全局变量(外部变量)的说明之前再冠以 static
3、 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用
4、域, 限制了它的使用范围。static 函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static) ,内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件static 全局变量与普通的全局变量有什么区别:static 全局变量只初使化一次,防止在其他文件单元中被引用;static 局部变量和普通局部变量有什么区别:static 局部变量只被初始化一次,下一次依据上一次结果值;static 函数与普通函数有什么区别:static 函数在内存中只有一份,普通函数在每个被调用中维
5、持一份拷贝程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。22、设有以下说明和定义:typedef union long i; int k5; char c; DATE;struct data int cat; DATE cow; double dog; too;DATE max;则语句 printf(“%d“,sizeof(struct date)+sizeof(max);的执行结果是? 答 、结果是:_52_。DATE 是一个 union, 变量公用空间 . 里面最大的变量类型是 int5, 占用 20 个字节. 所以它的大小是 20data 是
6、一个 struct, 每个变量分开占用空间. 依次为 int4 + DATE20 + double8 = 32.所以结果是 20 + 32 = 52.当然.在某些 16 位编辑器下, int 可能是 2 字节,那么结果是 int2 + DATE10 + double8 = 2023、队列和栈有什么区别?答 、队列先进先出,栈后进先出24、写出下列代码的输出内容i ncludeint inc(int a)return(+a);int multi(int*a,int*b,int*c)return(*c=*a*b);typedef int(FUNC1)(int in);typedef int(FUN
7、C2) (int*,int*,int*);void show(FUNC2 fun,int arg1, int*arg2)INC p=int temp =p(arg1);fun(printf(“%dn“,*arg2);main()int a;show(multi,10,return 0;答 、11025、请找出下面代码中的所以错误说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为 “dcba”1、i nclude“string.h“2、main()3、4、 char*src=“hello,world“;5、 char* dest=NULL;6、 int len=strlen(src);7
8、、 dest=(char*)malloc(len);8、 char* d=dest;9、 char* s=srclen;10、 while(len-!=0) 11、 d+=s-;12、 printf(“%s“,dest);13、 return 0;14、 答 、方法 1:int main()char* src = “hello,world“;int len = strlen(src);char* dest = (char*)malloc(len+1);/要为0 分配一个空间char* d = dest;char* s = /指向最后一个字符while( len- != 0 )*d+=*s-;*
9、d = 0;/尾部要加0printf(“%sn“,dest);free(dest);/ 使用完,应当释放空间,以免造成内存汇泄露return 0;方法 2:include include main()char str=“hello,world“;int len=strlen(str);char t;for(int i=0; i include int main(void) long l; char *str = “98765432“;l = atol(lstr); printf(“string = %s integer = %ldn“, str, l); return(0); 29.对于一个频繁使用的短小函数, 在 C 语言中应用什么实现,在 C+中应用什么实现?答 、c 用宏定义,c+用 inline30.直接链接两个信令点的一组链路称作什么?答 、PPP 点到点连接