摘要:注重點介紹函數。發現不能拷貝部分重疊內存情況但是,在編譯器中,庫函數和的功能一樣強大,所以用編譯器就會導致兩個結果一樣黑體然而其他的編譯器不一定會讓變得這樣強大。若是改變成其他大的類型容易造成內存的浪費。
??注:重點介紹 memcpy ,memmove 函數。
話不多說,正文開始??
觀察發現,這兩個函數的參數和返回類型一樣,是否會覺得這兩個函數有什么聯系呢?
請看下文
void* my_memmove(void* dest,const void* src, size_t count){ assert(dest && src); int i = 0; if(dest > src)//dest指向位置比src指向位置靠后 while (count--)//從后往前拷貝 { *((char*)dest + count) = *((char*)src + count); } else { while (i != count)//從前往后拷貝 { *((char*)dest + i) = *((char*)src + i); i++; } } return (char*)dest;}
void* my_memcpy(void* dest, const void* src, size_t count){ assert(src && dest); while (count--) { *((char*)dest + count) = *((char*)src + count); } return dest;}
運行結果
這里可以看到其實兩種函數的結果并不一樣。,發現strcpy不能拷貝部分 重疊內存 情況
但是,在VS2019編譯器中,庫函數 memcpy 和 memmove 的功能一樣強大,所以用VS編譯器就會導致兩個結果一樣,然而其他的編譯器不一定會讓 memcpy 變得這樣強大。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121536.html
前言:博主之前有已經寫過了C語言常用字符函數詳解+模擬實現,感興趣的同學可以去圍觀一下哦! 目錄 前言: 1.內存函數 memcpy() ?memmove() memcmp() memset() 2.錯誤信息報告函數 strerror() ?perror() 1.內存函數 memcpy() 作用:內存拷貝 函數原型: 注意:count:要拷貝的字節數 函數memcpy從src位置開始向后賦值c...
摘要:一般函數執行完畢,局部活動對象就會被銷毀,內存中僅僅保存全局作用域,但是閉包會長期駐扎在內存。我只是想通過這兩個例子來說明閉包的用處和好處。閉包會使變量始終保存在內存中,如果使用不當會增大內存消耗。 閉包特性 函數嵌套函數 函數內部可以引用外部的參數和變量 參數和變量不會被垃圾回收機制回收 閉包的作用 具體作用是有權訪問函數內部的變量,最常見的就是函數內部創建另一個函數,通過另一個函數...
摘要:類才支持實例屬性代碼解讀上面暫時只是概念性的寫法,事實上,的類只是一個原型鏈的語法糖而已,主要是從寫法上更接近于面相對象的類而已,另外一個作用就是區分的構造函數和函數之間的區分。 ES5的原型鏈和ES6的類實現詳解 JavaScript最初設計時受到了面相對象編程的影響,從而引入了new關鍵字,來實例化對象。而在ES5中new后面跟著的是構造函數(也是函數),而到了ES6則改成了cla...
摘要:類才支持實例屬性代碼解讀上面暫時只是概念性的寫法,事實上,的類只是一個原型鏈的語法糖而已,主要是從寫法上更接近于面相對象的類而已,另外一個作用就是區分的構造函數和函數之間的區分。 ES5的原型鏈和ES6的類實現詳解 JavaScript最初設計時受到了面相對象編程的影響,從而引入了new關鍵字,來實例化對象。而在ES5中new后面跟著的是構造函數(也是函數),而到了ES6則改成了cla...
閱讀 3577·2021-10-11 10:59
閱讀 1596·2021-09-29 09:35
閱讀 2264·2021-09-26 09:46
閱讀 3776·2021-09-10 10:50
閱讀 957·2019-08-29 12:17
閱讀 826·2019-08-26 13:40
閱讀 2440·2019-08-26 11:44
閱讀 2108·2019-08-26 11:22