简单说法

下列程序中输出的结果是()

#include <stdio.h>

int main()
{
        int i = 6;
        if( ((++i < 7) && (i++/6)) ||(++i <= 9))
                ;
        printf("%d\n", i);
        return 0;
}

答案:8
解析:
A && B
当A是0的时候,就表面这个式子整体为假,就已经不需要再计算B

A || B
当A是1的时候,就表面这个式子已经为真了,不需要在考虑B了

还需要注意的是,这个题三个式子不是并列的关系,前两个是在大括号里面的,如果是并列的话,那么这个程序结果应该为7.

下列表达式的值是多少???

false - ~0
#include <iostream>
#include <stdio.h>
using namespace std;

#define false 0;

int main()
{
        printf("%d\n", (false - ~0));
        return 0;
}

解析:
~0(对于32位):
00000000 00000000 00000000 00000000(取非)
11111111 11111111 11111111 11111111
综上所述:结果应该为-1
故最终答案为:1

如果一个类是myClass,关于下面代码正确描述的是:

myClass:: ~myClass(){
        delete this;
        this = NULL;
}

这里写图片描述

解析:

#include <iostream>
using namespace std;

class A
{
        int a;
        public:
                A(int a1)
                { a = a1;}
                ~A()
                {
                        delete this;
                        this = NULL;
                }
                void print()
                { cout<<a<<endl;}
};
int main()
{
        A b(1);
        b->print();
        return 0;
}

编译出错:
这里写图片描述
如上,大意是this不能作为左值
(去掉语句:this = NULL;会是正确的吗????)
这里写图片描述
如上:报错,可是这是为什么呢???
后来经过张翔同学的提醒,delete和free一般情况下是释放在堆中分配的内存空间,这里面并没有涉及到内存分配,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值