C語(yǔ)言程序設(shè)計(jì)編程學(xué)習(xí)—內(nèi)存操作函數(shù)庫(kù)mem.h相關(guān)知識(shí)詳解

C語(yǔ)言是面向過(guò)程的,而C++是面向?qū)ο蟮?/p>

C和C++的區(qū)別:

C是一個(gè)結(jié)構(gòu)化語(yǔ)言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過(guò)一個(gè)過(guò)程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過(guò)程(事務(wù))控制)。

C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問(wèn)題域,這樣就可以通過(guò)獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過(guò)程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”。

C與C++的最大區(qū)別:在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語(yǔ)言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯(cuò)!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒(méi)有好的算法,一樣不行。而且,“C加上好的設(shè)計(jì)”也能寫(xiě)出非常好的東西。

今天這篇介紹的主要針對(duì)是字符串進(jìn)行的一些操作函數(shù),畢竟多了解相關(guān)函數(shù),也是非常重要的,好了,不多說(shuō)直接進(jìn)入主題。

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!

一、memcpy()函數(shù):

該函數(shù)的一般形式為:

void *memcpy(void *dest,void *s,unsigned m);

功能:從指針s指向的一片內(nèi)存地址拷貝m個(gè)字節(jié)到目標(biāo)指針dest指向的一片內(nèi)存之中。

從參數(shù)的指針的類型可以看出該函數(shù)不單單只能拷貝指針,其他類型的也可以,比如整型、結(jié)構(gòu)體類型、浮點(diǎn)類型都可以。功能還是蠻強(qiáng)大的。

參數(shù):s是源區(qū)域指針,dest目的區(qū)域指針,m是需要復(fù)制的字節(jié)數(shù)。

返回值:指向目標(biāo)區(qū)域的指針(也就是指向dest的指針)。

注意:1,、指針s與dest指針指向的內(nèi)存不能重疊,否則有可能出錯(cuò)。

2、當(dāng)用作拷貝字符串時(shí),在遇到''時(shí)不會(huì)結(jié)束,而是肯定會(huì)拷貝完n個(gè)字節(jié)。

3、如目的指針指向的內(nèi)存空間以存有數(shù)據(jù),那么將被覆蓋掉。

4,第三個(gè)參數(shù)是字節(jié)數(shù),注意是字節(jié)數(shù),當(dāng)你需要拷貝一個(gè)整型數(shù)值,一般情況下整型占用四個(gè)字節(jié),因此m=4。

范例:

memcpy范例

運(yùn)行結(jié)果:

運(yùn)行結(jié)果

二、memmove()函數(shù):

該函數(shù)一般形式為:

void *memmove(void *dest,void *s,unsigned m);

功能:將s指針指向的內(nèi)存中的數(shù)據(jù)拷貝m個(gè)字節(jié)的數(shù)據(jù)到dest指針?biāo)赶虻膬?nèi)存區(qū)域中。

該函數(shù)的返回值為:指向dest的指針。

該函數(shù)與上面介紹的memcpy函數(shù)相比,即使源指針s指向的內(nèi)存區(qū)與目的指針dest指向的內(nèi)存內(nèi)存區(qū)有重疊,該函數(shù)仍能正確拷貝,但是效率沒(méi)有memcpy函數(shù)好,所以如果你不能保證兩者的內(nèi)存空間不存在重疊部分,那么建議使用memmove()函數(shù)。

當(dāng)然該函數(shù)跟上面的一樣,可以拷貝移動(dòng)任何類型的數(shù)據(jù)。

范例:

memmove范例

運(yùn)行結(jié)果:1 2 3 4 5。

三、memccpy()函數(shù):

其一般形式為:

void *memccpy(void *dest,void *s,int c,unsigned m);

功能:從指針s指向的內(nèi)存中拷貝m個(gè)字節(jié)到dest指針?biāo)赶虻膬?nèi)存中,當(dāng)遇到參數(shù)c時(shí)結(jié)束拷貝,則返回指向dest中值為c的下一個(gè)字節(jié)的地址的指針。

返回值:返回指向參數(shù)c后的在dest中的第一個(gè)字節(jié)的指針,如果s的前m個(gè)字節(jié)中參數(shù)c不存在,則返回NULL。

范例:

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!

memccpy范例

運(yùn)行結(jié)果:

運(yùn)行結(jié)果

四、memcmp()函數(shù):

該函數(shù)的一般形式為:

int memcmp(void *s1,void *s2,unsigned m);

功能,用于比較指針s1和s2指向的內(nèi)存區(qū)的前m個(gè)字節(jié),注意是按字節(jié)比較。

返回值:當(dāng)s1

等于時(shí),返回值為0,

大于時(shí),返回值大于0。

當(dāng)s1與s2時(shí)是指向字符串時(shí),就是按順序比較字符串中字符的大小,也就是按ascii的大小比較的。

范例:

memcmp函數(shù)范例

運(yùn)行結(jié)果:-1

上面一般情況運(yùn)用在字符串中,我故意這樣做,是表達(dá)整型也能用此函數(shù)比較,并且只比較第一個(gè)不同的數(shù)值,一旦找到第一個(gè)不同的,后面一律不管,多大都沒(méi)用。

五、memicmp()函數(shù):

其一般形式為:

int memicmp(void *s1,void *s2,unsigned m);

該函數(shù)功能跟上一個(gè)差不多,不同的是在比較字符串時(shí)不區(qū)分大小寫(xiě),其余差不多,參考上面,這里占時(shí)不多說(shuō)。

六、memset()函數(shù):

該函數(shù)的一般形式為:

void *memset(void *s,int ch,unsigned m);

功能:將指針s指向的內(nèi)存的前m個(gè)字節(jié)設(shè)置為ch指定的ascii值,該函數(shù)的作用通常為新申請(qǐng)的內(nèi)存做初始化的工作,返回指向s的指針。

注意:該函數(shù)是以字節(jié)方式來(lái)對(duì)內(nèi)存做初始化,不能用其對(duì)整型數(shù)組進(jìn)行任意數(shù)值的初始化(除0、-1外),比如看下面代碼:

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!

范例

運(yùn)行結(jié)果:

運(yùn)行結(jié)果

可以看到并沒(méi)有如愿把整型數(shù)組初始化為8,其實(shí)出現(xiàn)這種問(wèn)題的就是此函數(shù)以字節(jié)(8位二進(jìn)制)方式賦值,上面8整型,有32位,但其只取后八位進(jìn)行賦值,因此要是上面把8改成264,運(yùn)行結(jié)果是一樣的,因?yàn)槠浜蟀宋欢紴?0001000,就被賦予內(nèi)存的每一個(gè)字節(jié)中,那么在轉(zhuǎn)換成整型數(shù)值,那么整型數(shù)值元素值的二進(jìn)制就相當(dāng)于1000 0000 1000 0000 1000 0000 1000,轉(zhuǎn)換成十進(jìn)制也就是上面運(yùn)行的值,所以一定要注意,但是要是用在字符串上,就沒(méi)大問(wèn)題了。

好了,今天暫時(shí)介紹到這里。

這些是C/C++能做的

服務(wù)器開(kāi)發(fā)工程師、人工智能、云計(jì)算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺(tái)、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開(kāi)發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容