看了一份关于HR在面试一名C程序员可能提问的问题手册,学到了很多,很多都是一些琐碎的知识点,总是你写过很多大型的C程序,但是我敢说,里面也有你没掌握的东西。
1.全局变量和局部变量有何区别?
答:全局变量存储在静态存储区,局部变量存储在堆栈中,
疑惑:局部静态变量存储位置?
2.排序算法的时间复杂度?
例如:冒泡排序----O(n^2) 怎么理解?
3.什么是虚函数?--C++中的一个函数的定义
4.不能做switch()的参数类型
答:switch()的参数不能为实型—即float型,可以为整型,char型。
5.局部变量能否和全局变量重名?
答:能,局部会屏蔽全局,也就是说,在函数体内部,只能访问到局部变量,而访问不到全局变量。
C++中若使用全局变量,需要使用符号∷ ;C中不能访问到全局。
6.static修饰全局变量、局部变量、函数与没有static修饰的有何区别?
答:⑴static修饰的全局变量与没有static修饰的在存储方式上并无区别,都是静态存储方式,区别在于static修饰的全局变量作用域是本文件内,没有static修饰的全局变量的作用域是整个源程序。
⑵static修饰的局部变量表明该局部变量是静态局部变量,仅在第一次调用该函数的时候对该变量初始化一次,没有static修饰的局部变量,系统默认该变量是auto型的自动变量,存储在栈空间当中,函数运行完之后,该变量的存储空间被释放掉。
⑶static修饰的函数表明该函数仅仅作用于本文件之内,并且该函数对外部文件来说是不可见的。没有static修饰的函数编译器默认是被extern修饰的,对于整个源程序来说都是可见的。
7.程序的内存分配
答:
①栈区(stack)-由编译器自动分配释放,存放函数的参数值和局部变量的值。
②堆区(heap)-由程序员申请并且由程序员释放。
③全局区(静态区)--全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域。
④文字常量区-常量符串就是放在这里的。
⑤程序代码的二进制代码。
8.堆和栈的区别
效率:
答: 栈是由系统分配的,速率较快,程序员无法控,
堆是程序员申请,由new分配的,一般速度较慢。
存储内容:
栈:函数调用的时候,第一个进栈的是主函数中下一条指令的地址,然后是函数的各个参数,参数一般是由右向左入栈的,然后是自动局部变量。 注:局部静态变量是不入栈的。
堆:……
存储效率:
char s1[] = “aaaa”;
char *s2 = “bbbb”;
aaaa是在运行时刻赋值的,而bbbb是在编译时刻赋值的,但是在以后的存储中,在栈上的数组比指针所指向的字符串快。