pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

C語言的編程之美之內存函數

這篇文章主要介紹了C語言全部內存操作函數的實現詳細講解,作者用圖文代碼實例講解的很清晰,有感興趣的同學可以研究下

內存函數

memcpy內存拷貝

  • 函數memcpy從source的位置開始向后復制num個字節的數據到destination的內存位置。
  • 這個函數在遇到 ‘\0' 的時候并不會停下來。
  • 如果source和destination有任何的重疊,復制的結果都是未定義的。

原格式

image-20210912150415470

分析

**字面上意思只要是內存里面的東西就都可以進行拷貝,所以就打破了字符串拷貝的魔咒,什么類型都可以進行拷貝,那就不需要想來,肯定回和萬能類型(通用類型指針-無類型指針)void*有關,因為當時做qsort還是印象深刻的


/*num是幾個字節的意思*/
void* my_memcpy(void* dest, const void* src, size_t num)
{
	assert(dest && src);
	void* ret = dest;
	while (num--)
	{
		//和void*連用char*,分成最小然后一個一個傳
		*(char*)dest = *(char*)src;
		((char*)dest)++;//void*無類型不好直接加加,就強轉char*再加加
		((char*)src)++;
	}	
	return ret;
}

內存拷貝的問題

1.內存相關連的話,就會拷貝錯誤

image-20210912174618496

那你怎么解決內存相關連還不會有上面的錯誤,正面賦值交集的內存空間會被操作兩次,就會改變原來的值,那我們怎么做呢,如果從后面來呢,前面操作兩次會把后面的變了,那就先把后面的拿走賦值,不就間接的改變了原來會變的情況了嗎,所以這樣上面的代碼就得修改了,這是朝后面拷貝的情況,如果提目是朝前面拷貝的話,是不是從后面來就有問題了,反而從前面來會比較完美,所以我們得兩種情況都得考慮到

所以為了解決重疊拷貝的問題就有了memmove這個函數

2.內存不夠了還要朝里面拷貝直接程序掛了

image-20210912175703527

memmove內存重疊拷貝

用來處理內存重疊的情況

C語言規定

memcpy 只要處理內存不重疊的拷貝就可以

memmove 處理重疊內存拷貝

我們重寫memcpy的代碼是滿足C語言要求的,在vs這個編譯器中memcpy實際上是超額完成任務了,他的效果已經和memmove效果一樣了

image-20210912201352859

你會發現他們跑出來的效果 是一樣的,所以上面那個測試我就是用我自己的代碼測試的(已經達到C語言的標準了)

我們再精細點就是memmove的內容了

原格式

image-20210912195704561

分析

image-20210912200345318

image-20210912210111460

image-20210912210718304

image-20210912212544483


/*num是幾個字節的意思*/
void* my_memmove(void* dest,const void* src, size_t num)//memmove和memcpy的參數是一樣的
{
	assert(dest && src);
	void* ret = dest;
	if (dest < src)
	{
		while (num--)
		{
			//sre內存從前向后拷貝
			//和void*連用char*,分成最小然后一個一個傳
			*(char*)dest = *(char*)src;
			((char*)dest)++;//void*無類型不好直接加加,就強轉char*再加加
			((char*)src)++;
		}
	}
	else
	{
		while (num--)
		{
			//sre內存從后向前拷貝
			//和void*連用char*,分成最小然后一個一個傳
			*((char*)dest+num) = *((char*)src+num);
			//((char*)dest)++;//void*無類型不好直接加加,就強轉char*再加加
			//((char*)src)++;
		}
	}	
	return ret;
}

image-20210912215713723

memset內存設置

將緩沖區設置為指定的字符。

原格式

image-20210912224129279

memcmp內存比較

和strcmp相似,只不過一個是比較字符串,一個比較內存,由于不知道什么類型,所以后面有字節個數限制,準確的說應該和strncmp相似,因為后面都有一個個數的參數

原格式

image-20210912222610487

分析

基本和字符串比較一樣,就是變成了內存比較罷了

image-20210912233051911

image-20210912233234287


//buf1內存里的內容比buf2內存里的內容大就>0,反之<0
int my_memcmp(const void* buf1, const void* buf2, size_t count)
{
	assert(buf1 && buf2);
	while (--count && *(char*)buf1 == *(char*)buf2)//這個先減減就是細節
	{
		((char*)buf1)++;
		((char*)buf2)++;
	}
	if (*(char*)buf1 - *(char*)buf2 > 0)
		return 1;
	if (*(char*)buf1 - *(char*)buf2 < 0)
		return -1;
	return 0;
}

給你count不要亂超,因為他操作的是內存,沒有字符串補\0的功能

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注html5模板網的更多內容!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要介紹了C語言指針引用數組案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
這篇文章主要介紹了使用C語言操作文件的基本函數整理,包括創建和打開以及關閉文件的操作方法,需要的朋友可以參考下,希望能夠給你帶來幫助
scanf()函數是通用終端格式化輸入函數,它從標準輸入設備(鍵盤)讀取輸入的信息,接下來通過本文給大家介紹C語言中關于scanf讀取緩存區的問題,需要的朋友一起看看吧
本文主要講解C語言 常量,這里整理了 C語言常量的基礎知識,并附代碼示例和示例詳細講解,希望能幫助開始學習C 語言的同學
本文給大家分享的是一則使用C語言實現動態數組的代碼,完美解決內存溢出以及內存回收問題,有需要的小伙伴可以參考下
這篇文章主要為大家詳細介紹了C語言實現隨機抽獎程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 杰恒蠕动泵-蠕动泵专业厂家-19年专注蠕动泵 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 培训无忧网-教育培训咨询招生第三方平台 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 法钢特种钢材(上海)有限公司 - 耐磨钢板、高强度钢板销售加工 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 杭州用友|用友软件|用友财务软件|用友ERP系统--杭州协友软件官网 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 天津电机维修|水泵维修-天津晟佳机电设备有限公司 | 私人别墅家庭影院系统_家庭影院音响_家庭影院装修设计公司-邦牛影音 | 工程管道/塑料管材/pvc排水管/ppr给水管/pe双壁波纹管等品牌管材批发厂家-河南洁尔康建材 | 劳动法网-专业的劳动法和劳动争议仲裁服务网 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 苏州注册公司_苏州代理记账_苏州工商注册_苏州代办公司-恒佳财税 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | DDoS安全防护官网-领先的DDoS安全防护服务商 | 破碎机锤头_耐磨锤头_合金锤头-鼎成机械一站式耐磨铸件定制服务 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 温州食堂承包 - 温州市尚膳餐饮管理有限公司| 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 神马影院-实时更新秒播| 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 水上浮桥-游艇码头-浮动码头-游船码头-码瑞纳游艇码头工程 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | 断桥铝破碎机_发动机破碎机_杂铝破碎机厂家价格-皓星机械 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 |