今天遇到的笔试题

1) 共有五个求sizeof的值的题目(其他三个都是常见面试题目都能见到的,写下面两个有点容易忽略的):
char *p = "hello"    sizeof(p) =?
char p[] = "hello"   sizeof(p) =?

2) 把一个数字字符串改成数字,如"12345" 改成数字1234,不可以使用C库函数

3) 用最高效率方法求 1-2+3-4+5...+n的值。

4) 程序改错和写成运行结果,程序大概如下:
int main()
{
    char* str = "123456789";

    char* pchar = str;
    long* plong = str;

    pchar++;
    plong++;

    printf("<%d> [%d] , %s/n", sizeof(char), sizeof(pchar), pchar );
    printf("<%d> [%d] , %s/n", sizeof(long), sizeof(plong), plong );

    return 0;
}

 

下面是我做的答案,仅供参考:

1) 共有五个求sizeof的值的题目(其他三个都是常见面试题目都能见到的,写下面两个有点容易忽略的):
char *p = "hello"    sizeof(p) = 4 // 这个我当时大意了写了个6
char p[] = "hello"   sizeof(p) = 6

2) 把一个数字字符串改成数字,如"12345" 改成数字1234,不考虑负数,不可以使用C库函数
// 应该还要加上int是否overflow和字符串是否是数字串的判断,
// 为了简洁,写一个核心。我完全没有想到可以用减法,我局限到用ascii去转换单个的数字了...
int StringToNumber(const char* string) {
  const char* p = string;
  int number = 0;
  while (*p != '/0') {
    number = number*10 + (*p-'0'); // 这句是核心,值得思考
    p++;
  }

  return number;
}

3) 用最高效率方法求 1-2+3-4+5-6+7...n的值。
// 这个比较简单,主要要注意的是分析下表达式的特点后再计算
int Calc(int n) {
  if ( n%2 == 0 )
    return (n/2) * (-1);
  else
    return ((n-1)/2) * (-1) + n;
}

4) 程序改错和写成运行结果,程序大概如下:
int main()
{
    char* str = "123456789";

    char* pchar = str;
    long* plong = str; //这里转换下(地球人都知道的,,,哎)改成:long* plong = (long*)str;

    pchar++;
    plong++;

    printf("<%d> [%d] , %s/n", sizeof(char), sizeof(pchar), pchar );
    printf("<%d> [%d] , %s/n", sizeof(long), sizeof(plong), plong );

    return 0;
}


这个题目还是考指针的长度。。。。
输出结果:
<1> [4] , 23456789
<4> [4] , 56789

BTW:我只是觉得第二题目出的不错。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值