【整理】关于C/C++语言面试题问答

8 篇文章 0 订阅
5 篇文章 0 订阅

准备找工作ing,题目不是我自己遇到的,都是网上整理来的,非常感谢各路网友的分享。

答案可能自己加工过,尽量保证正确全面,欢迎大家阅读后指正指点指教!

只涉及C C++两种语言,数据结构和算法另外单开一贴。


第一大类:指针和内存空间

Q: 指针和引用的区别

A:

1)指针定义时不一定要初始化,初始化后可以改变指向的对象;引用定义时必须初始化,不存在空引用,而且初始化后不能改变绑定对象;

2)指针是一种数据类型,系统为指针分配内存; 引用不是数据类型,引用是对象的别名,系统不为引用分配内存,引用与绑定对象共享内存;

3)使用指针访问绑定对象要解引用,是间接访问;使用引用访问绑定对象是直接访问;

4)向函数传形参的时候,指针本身是拷贝副本的,而引用不拷贝。


Q: memcpy和strcpy的区别

A:

1)strcpy和memcpy都是标准C库函数

2)复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等;
3)复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出;memcpy则是根据其第3个参数决定复制的长度;
4)用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

(http://www.cnblogs.com/stoneJin/archive/2011/09/16/2179248.html)

Q: new和malloc的区别,free和delete的区别

A:

1)malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符;所以malloc/free要库文件支持,new/delete则不要。

2)对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free;

3)new自动计算需要分配的空间,而malloc需要手工计算字节数;

4)new是类型安全的,而malloc不是,比如:
                 int* p = new float[2]; // 编译时指出错误
                 int* p = malloc(2*sizeof(float)); // 编译时无法指出错误

5)new将调用constructor,而malloc不能;delete将调用destructor,而free不能

6)在用delete 释放对象数组时,留意不要丢了符号‘[]’。

(http://blog.csdn.net/hackbuteer1/article/details/6789164)



Q: 指针在16位机、32位机、64位机分别占用多少个字节

A:

1)16位机 2字节; 32位机 4字节; 64位机 8字节。

2)函数指针可能会有例外。

(http://www.zhihu.com/question/19691905)

Q: 描述内存分配方式以及它们的区别

A:

1)有四个段(UNIX,从低地址到高地址顺序为):代码段(code/text segment)、数据段(data segment)或全局段(global segment)、堆(heap segment)和栈(stack segment)

2)其中 数据段 可以再分成:初始数据段(initialised data segment)和BSS数据段(block start by symbol data segments),两者也经常被叫做全局初始化区和全局未初始化区。

3)其中初始数据段还可以再分为只读区(read-only area)和读写区(read-write area),前者也叫做常量区,后者也叫做(狭义的)全局初始化区

4)代码段大小固定,只读,存放编译后的程序; 数据段(或全局段)大小固定,存放全局变量、静态变量、静态类和命名空间成员;

堆段比较大,有程序员显示的分配内存和释放内存;栈段比较小,存放局部变量,程序负责分配和释放内存。

5)没必要区分自由存储区(malloc/free)和堆区(new/delete),看不出意义。

6)如程序注释

inta =0;//全局初始化区

char *p1; //全局未初始化区 
int main() 
{
    int b; //栈 
    char s[] = "abc"; //栈 
    char *p2; //栈 
    char *p3 = "123456"; //123456\0在常量区,p3在栈上。 
    static int c = 0 //全局(静态)初始化区 
    p1 = (char *)malloc(10); 
    p2 = (char *)malloc(20); 
    //分配得来得10和20字节的区域就在堆区。 
    strcpy(p1, "123456"); 
    //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一块。 
} 
(http://www-cs-faculty.stanford.edu/~eroberts/courses/cs106b/handouts/25-heap-stack-diagrams.pdf)

(http://blog.csdn.net/north23/article/details/3885168)

(http://www.questionscompiled.com/answer/cpp/3/memory-organization/)




第二大类:关键词和宏定义

第三大类:类、面向对象

Q: 面向对象的三大(四大)特性

A: 

1)封装、继承、多态、(抽象)。


第四大类:特殊技巧

Q: There are two int variables: a and b, don’t use “if”, “? :”, “switch”or other judgement statements, find out the biggest one of the two numbers.

A: ( ( a + b ) + abs( a – b ) ) / 2

这个效率高些,且不怕溢出;
a ^= b;
b ^= a;
a ^= b;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C/C++语言是一种广泛应用于软件开发的编程语言。它具有高效的执行速度、灵活的语法和强大的功能,被广泛用于嵌入式系统、操作系统、游戏开发等领域。 在C/C++语言的面试中,常见的问题包括以下几个方面: 1. 数据类型:C/C++语言中有各种不同的数据类型,如整型、浮点型、字符型、指针等。面试题可能会涉及到不同数据类型的特点、取值范围、大小等方面的问题。 2. 内存管理:C/C++语言需要手动管理内存,因此面试题可能会涉及到堆和栈的区别、内存泄漏的原因及如何避免等方面的问题。 3. 指针和引用:C/C++语言指针和引用是非常重要的概念,面试题可能会涉及到指针和引用的区别、使用场景、指针数组等方面的问题。 4. 字符串处理:C/C++语言中,字符串是以字符数组的形式存储的,面试题可能会涉及到字符串的输入、输出、比较、拷贝等方面的问题。 5. 文件操作:C/C++语言提供了丰富的文件操作函数,面试题可能会涉及到文件的打开、读写、关闭等方面的问题。 6. 面向对象编程:C++语言支持面向对象编程,面试题可能会涉及到类、对象、继承、多态等方面的问题。 在准备面试时,除了掌握C/C++语言的基础知识外,还可以多做一些相关的编程练习题,提高自己的编程能力和思维灵活性。通过深入理解C/C++语言的特性和原理,做好面试准备,可以增加面试成功的会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值