俩道厉害的面试题

选自论坛:http://bbs.csdn.net/topics/370070922

  1.不用局部变量和全局变量实现strlen;
  2.有2数据,写一个交换数据的宏;

 

先自己思考:

---------------------------------------------------------------------------

 

1解答:

size_t  strlen ( const  char  *str)
{
     return  *str==0 ? 0 : 1+ strlen (str+1);
}
 

2解答:

赵老师神作@zhao4zhong1

 

#include <stdio.h>
#define SWAP(a,b) ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a))
char    c1=1   ,c2=2   ;
short   s1=1   ,s2=2   ;
int     i1=1   ,i2=2   ;
__int64 I1=1i64,I2=2i64;
float   f1=1.0f,f2=2.0f;
double  d1=1.0 ,d2=2.0 ;
void main() {
    SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);
    SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);
    SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);
    SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);
    SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);
    SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);
 
    SWAP(c1,c1);
    printf("%d\n",c1);
}
//char           2,       1
//short          2,       1
//int            2,       1
//__int64     2,    1
//float          2,       1
//double        2,      1
//2


 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值