小狼,你家BOSS喊你面试啦!!!(二)

1、内存分配的形式有哪些

内存四区模型啊:栈、堆、全局区、代码区。

栈:存局部变量、返回值、参数等

堆:动态申请内存。存malloc或者new出的数据

全局区:存全局变量、静态变量、常量等

代码区:存放二进制代码

2、什么是内存泄漏

占用的内存空间得不到释放,导致这块内存不可再被使用,这就叫内存泄漏

3、栈空间的最大值是多少

windows是2M左右

4、什么是缓冲区溢出

缓冲区是一块有大小的内存区域,当填充的数据大小超过这块缓冲区,导致覆盖这块缓冲区后面的内容,这就叫缓冲区溢出

5、sizeof是关键字吗?

不是,是单目运算符,是一个函数。

6、strlen(“\0”)和sizeof(“\0”)分别等于多少

strlen(“\0”)=0

sizeof(“\0”)=1

7、对于结构体而言,为什么sizeof的返回的值一般大于期望值

因为有字节对齐机制

8、指针进行强制类型转换后与地址进行加法运算,结果是什么?

进行强制转换后应该是数值型,相当于偏移地址,与地址进行加法,结果还是一块内存的地址。

9、使用指针有什么好处

使用指针作为参数传递,减少内存申请,减少不必要的复制工作,提高程序效率

10、引用还是指针

题目没看懂,是说什么时候使用引用还是使用指针么?

11、指针和数组是否表示同意概念

不是啊,指针是一个变量,存放的内容是一块内存的地址;数组是内存开辟的一块空间,元素按顺序存储在这段空间内,数组名就是指向这块内存的首地址的指针。

12、指针是否可以进行  >   <   >=    <=  == 运算吗?

==可以,判断这两个指针是否指向同一块内存。

其他的比较起来没有意义啊,比如p1    p2     p1<p2    这是啥意思,p1地址小于p2地址??是吧

13、指针与数字相加的结果是什么

地址偏移,,最终得到的还是一个指向某块内存的指针

14、野指针和空指针

什么叫做野指针呢?就是释放了这块内存,但指向这块内存的指针没能置NULL;

空指针呢,就是指向NULL的指针

15、C/C++中头文件中ifndef和define和endif的作用有哪些

ifndef和endif是配对使用的,防止头文件多次被引用

define是宏定义,是把函数出现的某些字符串替换成宏定义的

16、头文件<>和“”的区别

<>包含的头文件是C/C++标准的头文件     //VS的安装库文件目录下,或者系统库文件下搜索  

“”包含的头文件是用户自定义的头文件     //这个是从工程目录下

搜索路径不一样

17、#define有哪些缺陷

容易产生错误   #define a   x+y         

int c = a*b;    ==>替换      c = x+y*b    而不是 c = (x+y)*b

类型不安全,不做类型检查

18、如何使用#define声明一个常数,用以表示一年中有多少秒

#define Year_to_Second 365*24*60*60

19、含参数的宏与函数有什么区别

不知道,,,一个是在预编译处理,,一个是在编译链接过程中使用?

20、宏定义平方运算#define SQR(X) X*X  对吗?

不对。   #define SQR(X) (X)*(X)

21、不能使用大于小于if语句,如何定义一个宏来比较两个数a、b的大小 

 #define Judge(a,b) 

猜你喜欢

转载自www.cnblogs.com/westlife-11358/p/9388309.html