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;
}
#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;
}
本文详细解读了C++中atoi函数如何将字符串转换为整数,以及memmove函数如何实现内存块的移动操作。通过深入分析,帮助开发者更好地理解和使用这些内置函数。
2952

被折叠的 条评论
为什么被折叠?



