irdeto笔试总结

 一,构造与析构

类C继承自A,C中包括一个成员B

以C类型实例化C

输出结果 A B C ~C ~B ~A

Dev-C++和VC 6.0结果相同;

 

若以A类型实例化C

   A * c = new C();
   delete c;

输出结果 A B C ~A

 

构造函数在调用前就对成员变量进行初始化,该成员变量为类类型时,调用其构造函数。

析构是相反。

 

二,delete this

delete语句可以看作如下两个过程,对于一个类类型的指针p来说

调用delete p的时候执行下面

  p->~Object();

  p->operate delete(p);

所以delete this应该是合法的

 

【转载】

你必须100%的确定,this对象是用 new分配的(不是用new[],也不是用定位放置 new,也不是一个栈上的局部对象,也不是全局的,也不是另一个对象的成员,而是明白的普通的new)。

你必须100%的确定,该成员函数是this对象最后调用的的成员函数。 

你必须100%的确定,剩下的成员函数(delete this之后的)不接触到this对象任何一块(包括调用任何其他成员函数或访问任何数据成员)。

你必须100%的确定,在delete this之后不再去访问this指针。

换句话说,你不能去检查它,将它和其他指针比较,和NULL比较,打印它,转换它,对它做任何事。自然,对于这种情况还要习惯性地告诫:当你的指针是一个指向基类类型的指针,而没有虚析构函数时(也不可以delete this)。

【/转载】

 

三,指针和数组

下面代码中试图返回p作为指针并输出

结果不可以预料。

p在printf前被释放

应将p[]改为* p

 

四,malloc

(p=(char *)malloc(0)) == NULL?

(p=(char *)malloc(0)) != NULL

 

C99标准(ISO/IEC 9899:1999 (E)):

If the size of the space requested is zero, the behavior is implementationdefined:
either a null pointer is returned, or the behavior is as if the size were some
nonzero value, except that the returned pointer shall not be used to access an object.

 

如果所请求的空间大小为0,其行为由库的实现者定义:可以返回空指针,也可以让效果跟申请某个非0大小的空间一样,所不同的是返回的指针不可以被用来访问一个对象。

 

五,类型转换

int main(void)
{
 unsigned int a = 10;
 int b = -20;
 printf("%d ",a+b);
}

我记得unsigned的级别应该高于int……

但是结果居然是-10

=。=!谭浩强C上也写的是double>long>unsigned>int

悲剧了。

 

测试如下:

 

 

结果

uint -10 int -20 uchar 246 char -10
uint+int -30 uchar+char 236

看来是printf的关系了。

再测

 

结果

uint -20 int -10 uchar 236 char -10 char246 -10
uint+int -30 uchar+char 226
int -10 > uint -20
uchar -20 > char -10
uchar -20 > char 246=-10

最后就是用cout测试

识别uint……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值