一、static有什么用途?(请至少说明两种)
答:1.限制变量的作用域    2.设置变量的存储域
二、C++中引用和指针的区别:
答:1 、要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象,因为引用肯定会指向一个对象,在C++里,引用应被初始化。指针没有这样的限制,不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。
例如:void printDouble(const double& rd) 

  cout << rd; // 不需要测试rd,它肯定指向一个double

相反,指针则应该总是被测试,防止其为空:
void printDouble(const double *pd)

  if (pd) 
  { // 检查是否为NULL 
    cout << *pd; 
  } 

2 、指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象引用则总是指向在初始化时被指定的对象,以后不能改变。
 string s1="John";
  string s2="Billy";
  string &rs=s1;//rs引用s1
  string *ps=s1;//ps指向s1
  rs=s2;//rs仍引用s1,但此时s1的值为"Billy"
  ps=s2;//ps指向s2,s1此时的值没有发生改变
3 引用只是个变量的别名 不占用存储空间
  指针是个变量 占用存储空间
三、 描述实时系统的基本特性
:在特定时间内完成特定的任务,实时性与可靠性。
四、全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
:全局变量储存在静态数据区,局部变量在堆栈中。(预备知识程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表3、全局区(静态区)(static全局变量和静态变量的存储是放在一块的,初始化的全局变量molloc函数和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。4、文字常量区常量字符串就是放在这里的,程序结束后由系统释放 5、程序代码区存放函数体的二进制代码。)
五、 什么是平衡二叉树?(查看数据结构)
答:左右子树都是平衡二叉树,且左右子树的深度差值的绝对值不大于1。(完全二叉树必然是平衡二叉树)
六、 堆栈溢出一般是由什么原因导致的?
答:没有回收垃圾资源(堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来)
七、 什么函数不能声明为虚函数?
答:constructor--构造函数((1)非类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为虚函数,但可以将析构函数定义为虚函数。实际上,优秀的程序员常常把基类的析构函数定义为虚函数。因为,将基类的析构函数定义为虚函数后,当利用delete删除一个指向派生类定义的对象指针时,系统会调用相应的类的析构函数。而不将析构函数定义为虚函数时,只调用基类的析构函数。(2)只需要在声明函数的类体中使用关键字“virtual”将函数声明为虚函数,而定义函数时不需要使用关键字“virtual”。(3)当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数自动成为虚函数。(4)如果声明了某个成员函数为虚函数,则在该类中不能出现和这个成员函
数同名并且返回值、参数个数、类型都相同的非虚函数。在以该类为基类的派生类中,也不能出现这种同名函数。 虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈)
八、 冒泡排序算法的时间复杂度是什么?
答:O(n^2)
九、 写出float x 零值比较的if语句。
答:if(x>0.000001&&x<-0.000001)
十、 Internet采用哪种网络协议?该协议的主要层次结构?
答:tcp/ip (一般来说:TCP提供运输层服务,而IP提供网络层服务
应用层/传输层/网络层/数据链路层/物理层
十一、 Internet物理地址和IP地址转换采用什么协议?
答:ARP (Address Resolution Protocol)(地址解析协议)
十二、IP地址的编码分为哪俩部分?
答:IP地址由两部分组成,网络号和主机号。不过是要和子网掩码按位与上之后才能区分哪些是网络位哪些是主机位。(IP的结构和分类:在IP地址的这四部分中,又可以分成两部分,一部分是网络号Network(用来标识网络),一部分是主机号(标识在某个网络上的一台特定的主机)。大家可能会问,那在这四部分中,哪部分表示网络,哪部分表示主机呢?因此在这,我们把IP地址分成A,B,C类。A类地址,第一组表示网络,后面三组表示主机。B类地址,第一,二组表示网络,后面两组表示主机。C类地址,第一,二,三组表示网络,最后一组表示主机。
十三、用户输入M,N值,从1N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。
答:循环链表,用取余操作做
十四、不能做switch()的参数类型是:
答:switch的参数不能为实型。
十五、局部变量能否和全局变量重名
答:能,局部会屏蔽全局。要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内
十六、如何引用一个已经定义过的全局变量?
答:extern ,可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错
十七、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错
十八、语句for( 1 )有什么问题?它是什么意思?
答:和while(1)相同。
十九、do……whilewhile……do有什么区别?
答:前一个循环一遍再判断,后一个判断以后再循环
二十、请写出下列代码的输出内容
#include<stdio.h>
main()
{
int a,b,c,d;
a=10;
b=a++;  //先取值,再加1
c=++a;  //先加1,再取值
d=10*a++;//先取值乘以10赋给da再加1
printf("bcd%d%d%d"bcd;
return 0;
}
答:1012120
二十一、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
答:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。
由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。
二十二、设有以下说明和定义:
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:___52____
答:DATE是一个union(联合体变量公用空间.里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20
data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.
所以结果是 20 + 32 = 52.
当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20
二十三、队列和栈有什么区别?
答:队列先进先出,栈后进先出
二十四、写出下列代码的输出内容(看不明白)
#include<stdio.h>
int inc(int a)
{
    return(++a);
}
int multi(int*a,int*b,int*c)
{
    return(*c=*a**b);
}
typedef int(FUNC1) (int in);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int *arg2)
{
    INC p=&inc;
    int temp =p(arg1);
    fun(&temp,&arg1, arg2);
    printf("%d\n",*arg2);
}
main()
{
  int a;
  show(multi,10,&a);
  return 0;
}
答:110

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。