国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言-內(nèi)存函數(shù)詳解

這篇具有很好參考價(jià)值的文章主要介紹了C語言-內(nèi)存函數(shù)詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


1. memcpy使用和模擬實(shí)現(xiàn)

返回類型和參數(shù):

void * memcpy ( void * destination, const void * source, size_t num );

1.函數(shù)memcpy從source的位置開始向后復(fù)制num個(gè)字節(jié)的數(shù)據(jù)到destination指向的內(nèi)存位置。
2.這個(gè)函數(shù)在遇到 ‘\0’ 的時(shí)候并不會(huì)停下來。
3. 如果source和destination有任何的重疊,復(fù)制的結(jié)果都是未定義的。
4.注意單位是字節(jié)
5.頭文件:#include<string.h>

memcpy使用:

int main() {
	int arr[20] = { 0 };//目標(biāo)數(shù)組
	int arr1[] = { 1,2,3,4,5 };//源數(shù)組
	memcpy(arr, arr1, 20);//20單位是字節(jié)
	for (int i = 0; i < 5; i++) {//拷貝完打印
		printf("%d ", arr[i]);
	}
	return 0;
}

運(yùn)行結(jié)果:
C語言-內(nèi)存函數(shù)詳解,c語言主要知識(shí)點(diǎn),c語言,開發(fā)語言,筆記,經(jīng)驗(yàn)分享,指針,函數(shù)

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

1.我們創(chuàng)建一個(gè)返回類型和參數(shù)于memcpy函數(shù)相同的函數(shù)
2.因?yàn)閙emcpy函數(shù)拷貝的單位是字節(jié),所以我們?cè)诳截愂菍㈩愋娃D(zhuǎn)化為(char*)類型
3.通過循環(huán)來拷貝

代碼實(shí)現(xiàn):

void* mn_memcpy(void* p1, const void* p2, size_t n) {
	assert(p1);//判斷是否為空指針,參數(shù)和類型memcpy一樣
	assert(p2);
	while (n) {//控制拷貝多少個(gè)字節(jié)
		*((char*)p1) = *((char*)p2);//將void*轉(zhuǎn)化為char*(一字節(jié))
			((char*)p1)++; 
			((char*)p2)++;
		n--;//
	}
}
int main() {
	int arr[20] = { 0 };
	int arr1[] = { 1,2,3,4,5 };
	mn_memcpy(arr, arr1, 20);
	for (int i = 0; i < 5; i++) {//拷貝完打印
		printf("%d ", arr[i]);
	}
	return 0;
}

運(yùn)行結(jié)果:
C語言-內(nèi)存函數(shù)詳解,c語言主要知識(shí)點(diǎn),c語言,開發(fā)語言,筆記,經(jīng)驗(yàn)分享,指針,函數(shù)

2. memmove使用和模擬實(shí)現(xiàn)

返回類型和參數(shù):

void * memmove ( void * destination, const void * source, size_t num );

1.和memcpy的差別就是memmove函數(shù)處理的源內(nèi)存塊和?標(biāo)內(nèi)存塊是可以重疊的。
2. 如果源空間和?標(biāo)空間出現(xiàn)重疊,就得使?memmove函數(shù)處理。
3. 單位是字節(jié)
4. 頭文件:#include<string.h>

memmove 使用:

 int main() {
	int arr1[] = { 1,2,3,4,5 };
	memmove(arr1+1, arr1, 3*sizeof(int));
	for (int i = 0; i < 5; i++) {//拷貝完打印
		printf("%d ", arr1[i]);
	}
	return 0;
}

運(yùn)行結(jié)果:
C語言-內(nèi)存函數(shù)詳解,c語言主要知識(shí)點(diǎn),c語言,開發(fā)語言,筆記,經(jīng)驗(yàn)分享,指針,函數(shù)
memmove模擬:

1.我們創(chuàng)建一個(gè)返回類型和參數(shù)于memmove函數(shù)相同的函數(shù)
2.因?yàn)閙emmove函數(shù)拷貝的單位是字節(jié),所以我們?cè)诳截愂菍㈩愋娃D(zhuǎn)化為(char*)類型
3.我們要分三種情況考慮,再通過循環(huán)拷貝

三種情況:
C語言-內(nèi)存函數(shù)詳解,c語言主要知識(shí)點(diǎn),c語言,開發(fā)語言,筆記,經(jīng)驗(yàn)分享,指針,函數(shù)

代碼實(shí)現(xiàn):

void* mn_memmove(void* p1, const void* p2, size_t n) {
	assert(p1);//判斷是否為NULL
	assert(p2);
	if (p1 <= p2 || (char*)p1 >= (char*)p2 + n)//包含兩種情況,直接按順序拷貝
	{
		while (n) {
			*((char*)p1) = *((char*)p2);//將void*轉(zhuǎn)化為char*(一字節(jié))
						((char*)p1)++; //(char*)p1加加,字節(jié)加一
						((char*)p2)++;
					n--;
		}
	}
	else {//第三種情況 倒序拷貝
		p1 = (char*)p1 + n - 1;
		p2 = (char*)p2 + n - 1;
		while (n) {
			*((char*)p1) = *((char*)p2);
			((char*)p1)--;
			((char*)p2)--;
			n--;

		}
	}
}
int main() {
	int arr1[] = { 1,2,3,4,5,6,7,8,9,0 };
	mn_memmove(arr1+1, arr1, 3*sizeof(int));
	for (int i = 0; i < 10; i++) {//拷貝完打印
		printf("%d ", arr1[i]);
	}
	return 0;}

運(yùn)行結(jié)果:
C語言-內(nèi)存函數(shù)詳解,c語言主要知識(shí)點(diǎn),c語言,開發(fā)語言,筆記,經(jīng)驗(yàn)分享,指針,函數(shù)

3. memset函數(shù)的使用

返回類型和參數(shù)

void * memset ( void * ptr, int value, size_t num );

1.memset是?來設(shè)置內(nèi)存的,將內(nèi)存中的值以字節(jié)為單位設(shè)置成想要的內(nèi)容。
2. 頭文件:#include<string.h>

使用:

int main() {
	char arr[] = "qwert";
	memset(arr, '0', 3 * sizeof(char));
	printf("%s", arr);
	return 0;
}

運(yùn)行結(jié)果:
C語言-內(nèi)存函數(shù)詳解,c語言主要知識(shí)點(diǎn),c語言,開發(fā)語言,筆記,經(jīng)驗(yàn)分享,指針,函數(shù)

4. memcmp函數(shù)的使用

返回類型和參數(shù):

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

1.比較從ptr1和ptr2指針指向的位置開始,向后的num個(gè)字節(jié)
2. 頭文件:#include<string.h>

返回值:
C語言-內(nèi)存函數(shù)詳解,c語言主要知識(shí)點(diǎn),c語言,開發(fā)語言,筆記,經(jīng)驗(yàn)分享,指針,函數(shù)
使用:

int main() {
	char arr[] = "qwert";
	char arr1[] = "abcdf";
	if (memcmp(arr, arr1))
		printf("arr>arr1");
	else
		printf("arr1>arr");
	return 0;
}

運(yùn)行結(jié)果:
C語言-內(nèi)存函數(shù)詳解,c語言主要知識(shí)點(diǎn),c語言,開發(fā)語言,筆記,經(jīng)驗(yàn)分享,指針,函數(shù)

以上就是我的分享了,如果有什么錯(cuò)誤,歡迎在評(píng)論區(qū)留言。
最后,謝謝大家的觀看!文章來源地址http://www.zghlxwxcb.cn/news/detail-751845.html

到了這里,關(guān)于C語言-內(nèi)存函數(shù)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++ Primer 6.5 特殊用途語言特性 6.6 函數(shù)匹配 知識(shí)點(diǎn)+練習(xí)題

    C++ Primer 6.5 特殊用途語言特性 6.6 函數(shù)匹配 知識(shí)點(diǎn)+練習(xí)題

    在給定的作用域中一個(gè)形參只能被賦予一次默認(rèn)實(shí)參 局部變量不能作為默認(rèn)實(shí)參,函數(shù)結(jié)束就銷毀,無法當(dāng)作默認(rèn)實(shí)參。 除此之外,只要表達(dá)式的類型可轉(zhuǎn)換成形參所需要的類型,則可以作為默認(rèn)實(shí)參 將函數(shù)定義為內(nèi)聯(lián)函數(shù),即加上inline,在編譯時(shí)內(nèi)聯(lián)展開代替函數(shù) 在編譯

    2024年01月22日
    瀏覽(22)
  • Python函數(shù)知識(shí)點(diǎn)

    ? ? ?函數(shù)是指一段可以直接被另一段程序或代碼引用的程序或代碼,也叫做子程序、方法?,F(xiàn)階段可以理解成函數(shù)是帶名字的代碼塊。 函數(shù)需要先定義再使用! ? ? 舉個(gè)例子來說,想要判斷一個(gè)三角形是不是直角三角形,需要用到勾股定理,只有先明確的定義出勾股定理是

    2023年04月09日
    瀏覽(25)
  • 函數(shù)的知識(shí)點(diǎn)

    1.下列選項(xiàng)中,能正確調(diào)用和運(yùn)行函數(shù)的是(B) A、(function(){ ???console.log(1); ??}) B、fun(); ??function fun(){console.log(1)} C、fn(); ??var fn = function(){console.log(1);}; D、var fn = new Function(a,console.log(a)); ??fn(1); 解析:A不會(huì)自動(dòng)調(diào)用函數(shù),若要調(diào)用函數(shù),應(yīng)改為(function(){consol

    2024年02月13日
    瀏覽(17)
  • ffmpeg的函數(shù)調(diào)用知識(shí)點(diǎn)

    av_dump_format 會(huì)打印出AVFormatContext的內(nèi)容,打印的內(nèi)容是什么意思? 我們使用av_dump_format打印出如下信息: 什么是文件的容器格式? \\\"mov,mp4,m4a,3gp,3g2,mj2\\\" 表示輸入文件的容器格式(Container Format)支持的擴(kuò)展名。 在多媒體文件中,容器格式用于組織和存儲(chǔ)多個(gè)音視頻流以及其他

    2024年02月16日
    瀏覽(22)
  • python常用的函數(shù)和知識(shí)點(diǎn)

    三元運(yùn)算符是 if-else 語句的簡寫。語法是value_if_true if condition else value_if_false。三元運(yùn)算符是一行代碼,可以替代多行 if-else 語句,使你的代碼更加簡潔。 上面的代碼通過檢查“a”是否大于“b”,如果為真則返回“a”,如果為假則返回“b”。 enumerate()函數(shù)向可迭代對(duì)象添加

    2024年02月13日
    瀏覽(21)
  • YOLOv5基礎(chǔ)知識(shí)點(diǎn)——激活函數(shù)

    YOLOv5基礎(chǔ)知識(shí)點(diǎn)——激活函數(shù)

    ???????什么是激活函數(shù)該選哪種激活函數(shù)?_嗶哩嗶哩_bilibili 深度學(xué)習(xí)筆記:如何理解激活函數(shù)?(附常用激活函數(shù)) - 知乎 (zhihu.com)? 詳解激活函數(shù)(Sigmoid/Tanh/ReLU/Leaky ReLu等) - 知乎 (zhihu.com) 算法面試問題二(激活函數(shù)相關(guān))【這些面試題你都會(huì)嗎】 - 知乎 (zhi

    2024年02月09日
    瀏覽(46)
  • ES6知識(shí)點(diǎn)匯總(4)--函數(shù)

    1、參數(shù) ES6允許為函數(shù)的參數(shù)設(shè)置默認(rèn)值 函數(shù)的形參是默認(rèn)聲明的,不能使用let或const再次聲明 參數(shù)默認(rèn)值可以與解構(gòu)賦值的默認(rèn)值結(jié)合起來使用 上面的foo函數(shù),當(dāng)參數(shù)為對(duì)象的時(shí)候才能進(jìn)行解構(gòu),如果沒有提供參數(shù)的時(shí)候,變量x和y就不會(huì)生成,從而報(bào)錯(cuò),這里設(shè)置默認(rèn)值

    2024年02月13日
    瀏覽(21)
  • C語言知識(shí)點(diǎn)匯總

    C語言知識(shí)點(diǎn)匯總

    C語言知識(shí)點(diǎn)保姆級(jí)總結(jié),這不得進(jìn)你的收藏夾吃灰?! 拖了很久的C語言所學(xué)知識(shí)的簡單小結(jié),內(nèi)容有點(diǎn)多,第一次總結(jié)也可能有錯(cuò)誤或者不全面,歡迎隨時(shí)補(bǔ)充說明! ? 用不同數(shù)據(jù)類型所定義的變量所占空間大小不一樣,定義的變量不是保存于數(shù)據(jù)類型中,而是因?yàn)橹挥?/p>

    2024年01月23日
    瀏覽(26)
  • [TS手冊(cè)學(xué)習(xí)] 03_函數(shù)相關(guān)知識(shí)點(diǎn)

    TS官方手冊(cè):TypeScript: Handbook - The TypeScript Handbook (typescriptlang.org) 函數(shù)類型表達(dá)式 使用類似于箭頭表達(dá)式的形式來描述一個(gè)函數(shù)的類型。 上述代碼中, fn: (a:string) = void 表示變量 fn 是一個(gè)函數(shù),這個(gè)函數(shù)有一個(gè)參數(shù) a ,是 string 類型,且這個(gè)函數(shù)的返回值類型為 void ,即沒有

    2024年02月05日
    瀏覽(21)
  • MATLAB知識(shí)點(diǎn):prctile函數(shù)(★★★☆☆)計(jì)算百分位數(shù)

    MATLAB知識(shí)點(diǎn):prctile函數(shù)(★★★☆☆)計(jì)算百分位數(shù)

    ?講解視頻:可以在bilibili搜索《MATLAB教程新手入門篇——數(shù)學(xué)建模清風(fēng)主講》。? MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講,適合零基礎(chǔ)同學(xué)觀看)_嗶哩嗶哩_bilibili 節(jié)選自第3章:課后習(xí)題講解中拓展的函數(shù) 在講解第三章課后習(xí)題的過程中,我給大家拓展了一些講義中沒有

    2024年04月26日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包