最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深度解析三個(gè)常見(jiàn)的C語(yǔ)言?xún)?nèi)存函數(shù)

 更新時(shí)間:2023年07月28日 09:07:29   作者:GOTXX  
這篇文章主要深度解析了三個(gè)常見(jiàn)的C語(yǔ)言?xún)?nèi)存函數(shù)memcpy,memmove,memcmp,所以本文將對(duì)memcpy,memmove,memcmp 三個(gè)函數(shù)進(jìn)行詳解和模擬實(shí)現(xiàn),需要的朋友可以參考下

1.memcpy函數(shù)(內(nèi)存拷貝函數(shù))

函數(shù)介紹 

1.memcpy函數(shù)的作用:從source的位置開(kāi)始向后復(fù)制num個(gè)字節(jié)的數(shù)據(jù)到destination的內(nèi)存位置。 可以拷貝字符數(shù)組,整型數(shù)組,結(jié)構(gòu)體等等,所以參數(shù)是void* 的指針;

2.這個(gè)函數(shù)在遇到 '\0' 的時(shí)候并不會(huì)停下來(lái)。(注意)

3.memcpy函數(shù)的局限:如果source和destination有任何的重疊,復(fù)制的結(jié)果都是未定義的。memcpy函數(shù)拷貝不重疊的內(nèi)存的拷貝。

4.拷貝結(jié)束,返回目標(biāo)空間的起始地址。

使用舉例:

memcpy的模擬實(shí)現(xiàn):

void* memcpy(void* dst, const void* src, size_t count)
{
	void* ret = dst;
	assert(dst);
	assert(src);
	while (count--) 
    {
		*(char*)dst = *(char*)src;
		dst = (char*)dst + 1;
		src = (char*)src + 1;
	}
	return(ret);
}

就是將源內(nèi)容一個(gè)一個(gè)字節(jié)的拷貝到目標(biāo)空間去,所以強(qiáng)制類(lèi)型轉(zhuǎn)換成char*;

2.memmove函數(shù)(內(nèi)存移動(dòng)函數(shù))

函數(shù)介紹 

memcpy和memmove函數(shù)的用法一樣;作用有所差別;

1.memmove函數(shù)不僅可以拷貝不重疊的內(nèi)存,而且可以拷貝重疊的內(nèi)存。

2.和memcpy的差別就是memmove函數(shù)處理的源內(nèi)存塊和目標(biāo)內(nèi)存塊是可以重疊的。

3.如果源空間和目標(biāo)空間出現(xiàn)重疊,就得使用memmove函數(shù)處理。

memmove的使用示例

當(dāng)memmove函數(shù)用來(lái)拷貝重疊內(nèi)存

memmove函數(shù)的模擬實(shí)現(xiàn)

void* memmove(void* dst, const void* src, size_t count)
{
	void* ret = dst;
	if (dst <= src || (char*)dst >= ((char*)src + count))
	{
		while (count--)
		{
			*(char*)dst = *(char*)src;
			dst = (char*)dst + 1;
			src = (char*)src + 1;
		}
	}
	else 
	{
		dst = (char*)dst + count - 1;
		src = (char*)src + count - 1;
		while (count--) 
		{
			*(char*)dst = *(char*)src;
			dst = (char*)dst - 1;
			src = (char*)src - 1;
		}
	}
	return(ret);
}

解析:

例如

將arr[]={1,2,3,4,5,6,7,8,9,10}中的1 2 3 4 5 放到3 4 5 6 7的位置上去,如果我們還是用前面memcpy的思想

第一步:把1放到3上去,變?yōu)? 2 1 4 5 6 7 8 9 10

第二步:把2放到4上去,變?yōu)? 2 1 2 5 6 7 8 9 10

第三步:我們需要將3放到5上去,但是,第一步我們已經(jīng)將3改變了,所以這種思想不行;

memmove模擬實(shí)現(xiàn)思想:

3.memcmp函數(shù)(內(nèi)存比較函數(shù))

函數(shù)介紹

比較從ptr1和ptr2指針開(kāi)始的num個(gè)字節(jié)

返回值如下:

使用示例代碼:

int main()
{
	char buffer1[] = "DWgaOtP12df0";
	char buffer2[] = "DWGAOTP12DF0";
	int n;
	n = memcmp(buffer1, buffer2, sizeof(buffer1));
	if (n > 0)
	{
		printf("'%s' is greater than '%s'.\n", buffer1, buffer2);
	}
	else if (n < 0)
	{
		printf("'%s' is less than '%s'.\n", buffer1, buffer2);
	}
	else
	{
		printf("'%s' is the same as '%s'.\n", buffer1, buffer2);
	}
	return 0;
}

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

到此這篇關(guān)于深度解析三個(gè)常見(jiàn)的C語(yǔ)言?xún)?nèi)存函數(shù)的文章就介紹到這了,更多相關(guān)C語(yǔ)言?xún)?nèi)存函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ virtual destructor虛擬析構(gòu)函數(shù)

    C++ virtual destructor虛擬析構(gòu)函數(shù)

    C++中基類(lèi)采用virtual虛析構(gòu)函數(shù)是為了防止內(nèi)存泄漏。具體地說(shuō),如果派生類(lèi)中申請(qǐng)了內(nèi)存空間,并在其析構(gòu)函數(shù)中對(duì)這些內(nèi)存空間進(jìn)行釋放,今天通過(guò)本文給大家介紹C++ virtual destructor虛擬析構(gòu)函數(shù)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-05-05
  • C++頭文件和cpp文件的原理分析

    C++頭文件和cpp文件的原理分析

    這篇文章主要介紹了C++頭文件和cpp文件的原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用MySQL編程實(shí)現(xiàn)C語(yǔ)言功能強(qiáng)大化步驟示例

    使用MySQL編程實(shí)現(xiàn)C語(yǔ)言功能強(qiáng)大化步驟示例

    這篇文章主要為大家介紹了使用MySQL編程實(shí)現(xiàn)C語(yǔ)言功能強(qiáng)大化步驟示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C語(yǔ)言趣味編程之平分七筐魚(yú)

    C語(yǔ)言趣味編程之平分七筐魚(yú)

    這篇文章介紹了C語(yǔ)言趣味編程之平分七筐魚(yú),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • 深入理解c/c++ 內(nèi)存對(duì)齊

    深入理解c/c++ 內(nèi)存對(duì)齊

    這篇文章主要介紹了c/c++ 內(nèi)存對(duì)齊,有需要的朋友可以參考一下
    2014-01-01
  • C++超詳細(xì)講解數(shù)組操作符的重載

    C++超詳細(xì)講解數(shù)組操作符的重載

    C 語(yǔ)言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。接下了讓我們探究一下數(shù)組操作符的重載
    2022-06-06
  • C語(yǔ)言行優(yōu)先和列優(yōu)先的問(wèn)題深入分析

    C語(yǔ)言行優(yōu)先和列優(yōu)先的問(wèn)題深入分析

    這篇文章主要介紹了C語(yǔ)言行優(yōu)先和列優(yōu)先的問(wèn)題深入分析的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語(yǔ)言 從根本上理解指針

    C語(yǔ)言 從根本上理解指針

    C語(yǔ)言這門(mén)課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語(yǔ)言的學(xué)習(xí),對(duì)指針的掌握是非常重要的,本文將具體針對(duì)指針的基礎(chǔ)做詳盡的介紹
    2022-04-04
  • c語(yǔ)言實(shí)現(xiàn)兩個(gè)單鏈表的交叉合并方式

    c語(yǔ)言實(shí)現(xiàn)兩個(gè)單鏈表的交叉合并方式

    今天小編就為大家分享一篇c語(yǔ)言實(shí)現(xiàn)兩個(gè)單鏈表的交叉合并方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • C語(yǔ)言各種操作符透徹理解下篇

    C語(yǔ)言各種操作符透徹理解下篇

    C?語(yǔ)言提供了豐富的操作符,除了上篇中的算術(shù)操作符,移位操作符,位操作符,賦值操作符外,還有單目操作符、關(guān)系操作符、邏輯操作符、條件操作符等等,讓我們通讀本篇來(lái)詳細(xì)了解吧
    2022-02-02

最新評(píng)論

宁安市| 青浦区| 磐安县| 宜章县| 嘉峪关市| 枣阳市| 阿合奇县| 巴林右旗| 原阳县| 越西县| 来宾市| 历史| 尼勒克县| 绿春县| 普安县| 襄樊市| 莱阳市| 辛集市| 邛崃市| 浠水县| 锦州市| 六盘水市| 灌阳县| 黑河市| 金门县| 青河县| 都昌县| 贡嘎县| 鄂尔多斯市| 泗洪县| 清新县| 且末县| 溧阳市| 巴中市| 延边| 县级市| 汶川县| 曲麻莱县| 新沂市| 昌邑市| 固始县|