一些变态的笔试题目-摘自程序员面试宝典

1.C中printf计算参数时是从右到左压栈

int main()
{


int arr[]={6,7,8,9,10};


int *ptr=arr;
printf("%d,%d\n",*ptr,*(++ptr));


cout<<*ptr<<'\t'<<*(++ptr)<<'\n';
return 0;
}


这个输出是7,7

8 8

C中printf计算参数时是从右到左压栈的。

然后我想实践一下cout的效果,发现原来cout也会有压栈顺序的!


2.类型转换



float a=1.0f;
cout<<(int)a<<endl;
cout<<(int &)a<<endl;
cout<<((int)a==(int &)a)<<endl;


输出是1

1065353216

0

因为float a=1.0f在内存表示是3f800000

强制转换,会把内存值当int输出。

但是f=0.0f就都是0, cout<<((int)a==(int &)a)<<endl;输出为true、




unsigned int a=0xFFFFFF7;


unsigned char i=(unsigned char)a;


char *b=(char *)&a;


printf("%08x,%08x",i,*b);


输出是000000f7,fffffff7

可以 先通过

union{int a;char c;}t;
t.a=0;
t.c=1;

测试机器是大小尾端


3.const

在const函数中可以改变mutable数据。


4.sizeof

P50

struct
{
long a1;
short a2;
}A;

sizeof(A)大小是8,因为要数据对齐。

编译器还会对函数进行调整为了内存对齐。

性能要求地址总线总是按照对齐后的地址来读取。

可以用pack来禁止对齐调整。


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

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


句柄和指针的区别。


auto_ptr使用

P81 auto_ptr放入contatiner是不正确的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值