一些小细节

1.下面代码有什么问题?
Void test2() 

  char string[10], str1[10]; 
  for(i=0; i<10;i++) 
  { 
     str1[i] ='a'; 
  } 
  strcpy(string, str1); 
}

数组越界

strcpy拷贝的结束标志是查找字符串中的/0 因此如果字符串中没有遇到/0的话 会一直复制,直到遇到/0

——————————————————————————————————————-————————

 

 

2. .h头文件中的ifndef/define/endif 的作用?

 

答:防止该头文件被重复引用。

 

 

3. #include<file.h> 与#include "file.h"的区别?

 

答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。

4. New delete mallocfree 的联系与区别?
答案:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的destructor,而free 不会调用对象的destructor.

5. 有哪几种情况只能用intialization list(初始化列表) 而不能用assignment(赋值)?

答案:当类中含有const、reference 成员变量;基类的构造函数都需要初始化表。

6. main 函数执行以前,还会执行什么代码?
答案:全局对象的构造函数会在main 函数之前执行,为malloc分配必要的资源,等等。

7. 描述内存分配方式以及它们的区别?
1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量
2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。
3) 从堆上分配亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。

4) 代码区。

 8.注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

posted on 2013-05-21 21:19  samules  阅读(173)  评论(0编辑  收藏  举报

导航