ibm 再次笔试

今天又去ibm笔试和面试了,又一次被bs了。题目更加的怪异。

void test(char t[100]){

    char * p  = t;

    cout<<sizeof(p)<<endl;    //4

    cout<<sizeof(t)<<endl;    //4

}

两个结果都是4,晕死

 

 

int b =10;

int & a = b;

int *  p = &a;

可以取得a的地址和b的地址一样,看来引用是变量的别名这个说法还是对的。

 

“xyz”[2]是z,也可以char t = "xyz"[2];

取地址的话是:const char *  te = &("xyz"[2]);

 

 

枚举型是常量表达式,里面所有的元素都是常量

enum flag{x=1,y=2,z=5}

flag g = flag(123); //把123转化为flag枚举型

 

x^=y^=x^=y这个顺序是从右到左,然后这个结果和x=x+y;y=x-y;x=x-y;相同。这个东西太怪异了。

 

struct Test1
{
        int a:5;
        int b:4;
        int c:7;
};

Test1 t;

t.a=31;

t.b=2;

t.c=0;

int * p = (short*)&t;

又是这道题目,如果在小端的机器上,t对应的内存应该是|00000000|01011111|即a,b,c依次放在内存从低到高地址。所以此时的值时95。

如果是大端,则内存的值为01011111|00000000。此时的值时0x5f00。

记住x86是小端,即一个数值的低位部分存放在内存的低地址,高位部分存放在内存的高地址。

大端则相反,即一个数值的低位部分存放在内存的高地址,高位部分存放在内存的低地址。

 

用macro写MIN(a,b),#define MIN(a,b) (a)<(b)?(a):(b),错误的例子是int a = 1; MIN(a++,123),这样a++会调用两次。

可以用template+inline来代替macro

template<class T>
inline int min1(T a,T b){
        if(a<b)return a;
        return b;
}

 

void * p = malloc(0);

if(p == NULL){

   cout<<"it is not allocated"<<endl;

}

else{

    cout<<"it is allocated"<<endl;

}

在gcc上是it is allocated.根据c98的规范:

就是说当malloc的参数为0时,可能返回一个NULL,也可能返回一个合法地址,但是不应该用这个地址去访问内存空间。

class T{};

T * tt;

T t;

*tt=t;

如果T没有数据成员,则这个代码执行没有问题,但是如果T有成员变量,则会segmentation fault.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值