c,c++常见面试题

1.名字相同的指向不同类型的指针有什么区别

答:计算机的CPU决了内存寻址方式,所以,不管指针所指对象是什么类型的,指针本身的规格都一样。如果一个指针变量的关联类型为int,则通过指针变量访问对象时,读取从指针指示的位置开始的连续4个字节,并按整型数据解释。如果一个指针变量的关联类型为char,则通过指针变量访问对象时,读取指针位置的当前字节,并按字符型数据解释。 2.char * a[]=\这种写法对不对。

答:这是指针数组。表示数组元素的类型是指针类型。 指针数组说明方式为:类型 * 标识符【表达式】 例如:int * pi[3] //数组元素是关联类型为整形的指针

char * ps[10] //数组元素是关联类型为字符型的指针 3.linux系统vim命令如何让光标移动到最后一行 答:G:光标移到最后一行 nG:光标移到n行首位 n+:光标下移n行 n-:光标上移n行

4.如何申请一段长度为10字节的空间

答:int * p=(int *)malloc (10); malloc()和new()的区别见转载文章 5.C++中malloc()函数返回的是什么 答:指针

6.static的基本用法

当类成员冠以static声明时,称为静态成员。“静态”是指它的作用域局部于类,一个类可以创建多个对象,因此,静态成员提供了一种同类 对象共享的机制;“成员”是指它与普通类成员一样受不同访问特性的约束。

1.静态数据成员:在类中声明,在类外定义。尽管static数据成员从存储性质上式全局变量,但是其作用域是类。static数据成员在类外可以用“类名::”做限定词,或通过对象访问。

2.静态成员函数:静态成员函数提供了一个不依赖于类数据结构的共同操作,它没有this指针。因为静态成员函数只能访问类的静态数据成员。 7.const基本用法

答:用于约束对象的访问性质,使对象一旦初始化就不允许修改。它的作用分为以下几个方面:

1)标识常量:C++语言中,当用const约束基本类型存储单元为只读事,在程序中使用存储单元的名字就像使用常数值一样,即用表示度表示常量。

const 类型 常量标识符=常量表达式

2)用const约束指针对所指对象访问时,这个指针称为指向常量的指针。 const 类型 *指针 or 类型 const * 指针

3)指针常量:指针变量的值只能在定义的时候初始化,定义后不能修改,即不能改变指针变量的指向。但不影响所指对象的访问特性。 类型 * const 指针 const 写在指针变量名之前,表示约束指针变量本身。

4)指向常量的指针常量:指针本身和所指对象的值在定义后都限制为只读,不能写。

const 类型 * const 指针 or 类型 const * const 指针

5)常引用:冠以const定义的引用,将约束对象用别名方式访问时为只读。 const 类型 & 引用名=对象名 在类中const的用法: 1)常数据成员

2)常对象:若在定义对象的说明语句以const作为前缀,则该对象称为常对象。这个对象的全部数据成员在作用域中约束为只读。

3)常成员函数:常成员函数的this指针被约束为指向常量的指针。由于this指针隐含定义,所以常成员函数在函数头以关键字const做后缀。const成员函数的函数体代码不能修改this所指对象的成员。即以const做后缀的成员函数

不能修改类的数据成员也不能调用能够修改数据成员的成员函数。只能调用const成员函数。

4)补充知识:在const成员函数中,用mutable修饰成员变量名后,就可以修改类的成员变量了。 8.C++中如何编写单例类

1. class CSingleton 2. {

3. private:

4. CSingleton() //构造函数是私有的 5. { 6. }

7. static CSingleton *m_pInstance; 8. public:

9. static CSingleton * GetInstance() 10. {

11. if(m_pInstance == NULL) //判断是否第一次调用 12. m_pInstance = new CSingleton(); 13. return m_pInstance; 14. } 15. }; 16. class CSingleton 17. { 18. private: 19. CSingleton() //构造函数是私有的 20. { 21. } 22. static CSingleton *m_pInstance; 23. public: 24. static CSingleton * GetInstance() 25. {

26. if(m_pInstance == NULL) //判断是否第一次调用 27. m_pInstance = new CSingleton(); 28. return m_pInstance; 29. } 30. };

9.指针和引用的区别:

答:引用仅仅是对象(或变量)的别名,不开辟新的内存空间。这与对象(或变量)指针不同。引用常常用于函数的参数传递。另外,引用作为对象(或变量)的别名只能在定义时初始化。 10.迷途指针和空指针

当delete一个指针的时候,实际上仅是让编译器释放内存,但指针本身依然存在。这时它就是一个迷途指针。

当使用以下语句时,就可以把迷途指针改为空指针:MyPtr=0; 11.C++z中有了malloc/free,为什么还需要new/delete?

答:malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于动态内存和释放内存。对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此,C++语言需要一个能完成动态分配和初始化共走的运算符new,以及一个能够与清理与释放内存工作的运算符delete,new/delete不是库函数,而是运算符。

面试题1:变量的声明和定义有什么区别

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4