C语言相关题目

1C++中有了malloc/free,为什么还需要new/delete?

主要是除了控制内存还能执行其他编译器相关操作。

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

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

因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。new/delete不是库函数,而是运算符。

2 有两个变量a和b,不用“if”,“?:”,“switch"或其他判断语句,找出两数中间的最大值

int max = ((a+b)+abs(a-b) ) / 2;

3.return (x&y)+((x^y)>>1))返回值的结果是什么?

int f( int x, int y)

{

    return (x&y)+((x^y)>>1);

}

x&y是取相同的位与,这个结果是x和y相同位的一半,x^y是取x和y的不同位,右移相当于除2,这个函数的功能是取两个数的平均值

 4.空指针和迷途指针(悬浮指针)的区别是什么?

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

当使用以下语句时,可以把迷途指针改为空指针:

       Myptr = 0;

通常,如果在删除一个指针后又把它删除了一次,程序会变得非常不稳定,任何情况都有可能发生,但是如果像只是删除一个空指针,则什么事情都不会发生,这样做非常安全。

使用迷途指针或空指针(如Myptr=0)是非法的,而且有可能造成程序崩溃。如果指针是空指针,尽管同样是崩溃,但它同迷途指针造成的崩溃相比是一种可预料的崩溃。这样调试起来方便很多。

5.在C++程序中调用被C编译后的函数,为什么要加extern "C"?

C++语言支持函数重载,C语言不支持函数重载,函数被C++编译器编译后在库的名字与C语言的不同。假设某个函数的原型为void foo(int x, int y)。该函数被C编译器编译后与库中的名字为_foo,而C++编译器刚会产生像_foo_int_int之后类的名字。

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值