手寫函式原型

2022-09-04 10:45:11 字數 1416 閱讀 4568

1、memcpy函式

void *memcpy(void *dst, const

void *src, int len)

void *ret =dst;

if(dst <= src || (char *)dst >= (char *)src +len)

}else }

return

ret;

}

2、memmove函式

在linux中,memcpy是不考慮記憶體重疊的隱患問題的,即方法一; memcpy的改進版,考慮上記憶體重疊問題,就是memmove,即方法二。

方法一:

void *memcpy(void *dest, const

void *src, size_t n)

方法二:

void *memmove(void *dest, const

void *src, size_t n)

else

//有記憶體重疊,從高位址開始複製

return

dest;

}3、strcpy函式

char *strcpy(char *strdest, const

char *strsrc)

4、strcat函式

char * strcat (char * dst, const

char *src)

//那麼為什麼要返回char*型別呢?

答:是為了方便賦值給其他變數

//再問,還有其他辦法能實現s1連線s2字串嗎?

答:可以,如下:

void mystrcat (char dst[ ],char

src)

dst[i]=』\0』; //

在字串dst的末尾新增乙個字串結束標誌

}

5、atoi函式

int myatoi(char *str)

if (*str == '

-' || *str == '+'

) str++;

}while (*str >= '

0' && *str <= '9'

)

else

ret = ret * 10 +cur;

str++;

}return ret *flag;

}————————————————

#define int_max 2147483647

#define int_min (-int_max - 1)二者位於

之中

前端手寫系列 手寫reduce函式

reduce函式常用於對陣列,reduce函式接受3個引數 被迭代的陣列 用於迭代計算的函式 迭代的初始值 注意點 如果沒有提供初始值時,會預設使用陣列的第乙個元素來作為初始值 function reduce arr,callback,initialval 如果沒有將initialval傳遞給該函式...

手寫call,apply,bind函式

涉及面試題 考慮兩點 function.prototype.mycall function context context context window 和上面的 一樣 context.fn this const args arguments slice 1 const result context...

手寫call apply bind函式

function.prototype.mcall function context,args context context window global const funcname symbol context funcname this 傳入的引數不是陣列 if array.isarray ar...