下列程序中输出的结果是()
#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一般情况下是释放在堆中分配的内存空间,这里面并没有涉及到内存分配,