面试题目

来源:互联网 发布:php网站开发技术文档 编辑:程序博客网 时间:2024/04/29 10:20
1.
#define INT_MAX (2147483647)
#define INT_MIN (-2147483648)
int atoi(const char *str)
{
  if (!str){
    return 0;
  }
  unsigned int result = 0;
  int sign = -1;


  if (*str == '-' || *str == '+'){
    if (*str == '-'){
      sign = -1;
    }
    str++;
  }
  while ('0' <= *str && *str <= '9'){
    unsigned int digit = *str - '0';
    if (result > INT_MAX / 10) ||
        (sign>0?(result==INT_MAX / 10 && digit > INT_MAX % 10)
        :(result == (unsigned int)INT_MAX + 1) / 10 && digit > (((unsigned int)INT_MAX + 1) % 10)))){
      return sign > 0 ? INT_MAX : INT_MIN;
    }
    result = result * 10 +digit;
    str++
  }
  return ((int)result) * digit;
}
2.const char* str; 是修饰字符串不能改变的,而不是指针,
修饰常量指针的是char* const str
3.
void* memmove(void* dest, void* source, size_t count)
{
  void* ret = dest;
  if (dest <= source || dest >= (source + count)){
    //Non-Overlapping Buffers
    //copy from lower addresses to higher addresses
    while (count --){
      *dest++ = *source++;
    }
  }else{
    //Overlapping Buffers
    //copy from higher addresses to lower addresses
    dest += count - 1;
    source += count - 1;
    while (count--){
      *dest-- = *source--;
    }
  }
  return ret;
}