【三支火把】---C语言面试问题总结

看了一份关于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是在编译时刻赋值的,但是在以后的存储中,在栈上的数组比指针所指向的字符串快。

原文地址:https://www.cnblogs.com/szhb-5251/p/5682196.html