c語言學習16——內存函數

內存函數

  • 一、memcpy使用和模擬實現
    • 1.1參數
    • 1.2 使用
    • 1.3 模擬實現
  • 二、memmove使用和模擬實現
    • 2.1 參數
    • 2.2 使用
    • 2.3 模擬實現
  • 三、memset使用
    • 3.1 參數
    • 3.2 使用
  • 四、memcmp使用
    • 4.1 參數
    • 4.2 使用

一、memcpy使用和模擬實現

1.1參數

在這里插入圖片描述

  • 因為內存中不知道存的是什么類型的地址,所以函數的參數以及返回值都是void類型。
  • 第一個參數是要拷貝到哪;第二個參數是從哪里拷貝;第三個參數是要拷貝的數據長度。
  • 該函數不會檢查是否有終止字符‘\0’,它會準確地復制num長度的數據。
  • 為了避免溢出,destination和source的長度應至少為num。
  • destination和source不能有重疊。

1.2 使用

在這里插入圖片描述

1.3 模擬實現

void my_memcpy(void* arr2, void* arr1, size_t num)
{while (num--){*(char*)arr2 = *(char*)arr1;((char*)arr2)++;((char*)arr1)++;}
}int main()
{int arr1[] = { 1,2,3,4,5,6 };int arr2[2];my_memcpy(arr2, arr1, 8);int i = 0;for (i = 0;i < 2;i++){printf("%d ", arr2[i]);}return 0;
}

在這里插入圖片描述
在模擬實現時,重點是對數據的拷貝,因為內存中存放的數據不知道其類型,因此我們把數據分成最小的單元也就是1個字節,對應char類型數據,因此將void類型強制轉換成char類型的數據,然后通過while循環,遍歷num個字節長度的數據,實現一定量數據的拷貝。

二、memmove使用和模擬實現

2.1 參數

在這里插入圖片描述

  • 注意:memmove和memcpy的區別就是,memmove所指向的兩塊空間可以有重疊。

2.2 使用

在這里插入圖片描述

2.3 模擬實現

//展示其中一種特例
#include <assert.h>void my_memmove(void* arr2, void* arr1, size_t num)
{assert(arr1 && arr2);if (arr1 <= arr2){while (num--){*((char*)arr2 + num) = *((char*)arr1 + num);}}else{while (num--){*((char*)arr2) = *((char*)arr1);((char*)arr2)++;((char*)arr1)++;}}
}int main()
{int arr1[] = { 1,2,3,4,5,6 };my_memmove(arr1, arr1+1, 8);int i = 0;for (i = 0;i < 5;i++){printf("%d ", arr1[i]);}return 0;
}
}

在這里插入圖片描述

  • 注意:在進行memmove的模擬實現時,應考慮重疊的情況,例如對一個字符串進行調整時,可能會出現:source地址分別>、<、=destination地址的情況,因此需要分情況來討論。

三、memset使用

3.1 參數

在這里插入圖片描述

  • 參數一是一個指向所要修改的內存的地址;參數二是要修改成什么數值;參數三是修改幾個字節個長度的數據。

3.2 使用

在這里插入圖片描述

四、memcmp使用

4.1 參數

在這里插入圖片描述

  • 參數一和參數二是要比較的兩個數據的地址;參數三是要比較的數據的長度。
  • 內存1>內存2,打印一個大于0的數字;內存1<內存2,打印一個小于0的數字;內存1=內存2,打印0。

4.2 使用

在這里插入圖片描述
比較的是12個字節,也就是前三個數字的大小,數組2的前三個數字比數組1前三個數字大,所以打印小于0的數字,-1。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901452.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901452.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901452.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TLA:用于接觸-豐富操作的觸覺-語言-動作模型

25年3月來自三星中國研發中心、中科院自動化所和北京智源的論文“TLA: Tactile-Language-Action Model for Contact-Rich Manipulation”。 視覺-語言模型已取得顯著進展。然而&#xff0c;在語言條件下進行機器人操作以應對接觸-密集型任務方面&#xff0c;仍未得到充分探索&…

【JavaEE】SpringBoot 統一功能處理

目錄 一、攔截器1.1 使用1.1 定義攔截器1.2 注冊配置攔截器 1.2 攔截器詳解1.2.1 攔截路徑1.2.2 攔截器執?流程 1.3 適配器模式 二、統一數據返回格式2.1 簡單用法2.2 問題及解決 三、統一異常處理 一、攔截器 攔截器&#xff1a;攔截器是Spring框架提供的核?功能之?&#…

【前端實戰】使用 BroadcastChannel API 實現跨標簽頁通信

一、引言 在現代 Web 應用開發中&#xff0c;我們常常會遇到需要在不同瀏覽器標簽頁之間進行通信的需求。例如&#xff0c;在一個電商應用中&#xff0c;用戶在一個標簽頁中添加商品到購物車&#xff0c;希望在其他標簽頁中也能實時顯示購物車的更新信息。傳統的實現方式可能會…

微信小程序 - [渲染層錯誤] Uncaught TypeError: Cannot read property ‘D‘ of undefined

問題&#xff1a;[渲染層錯誤] Uncaught TypeError: Cannot read property D of undefined 解決&#xff1a; 該錯誤可能還是小程序的渲染模式有關系&#xff0c;查看app.json中是否有如下配置&#xff0c;刪除即可&#xff0c;或者降低小程序調試基礎庫版本。

【MySQL高級】事務,存儲引擎,索引(一)

Mysql高級 DQL查詢語句 反引號 模糊查詢避免%出現在開頭,會造成索引失效 order by排序先后 表名列名都需要用${}&#xff0c;他們不能帶’’ 去重統計數量 null的運算 分組函數會自動忽略null&#xff0c;不用對null進行處理 截取子串substr&#xff08;字段&#xff0c;下標…

面試篇 - GPT-1(Generative Pre-Training 1)

GPT-1&#xff08;Generative Pre-Training 1&#xff09; ?模型結構 Transformer only-decoder&#xff1a;GPT-1模型使用了一個12層的Transformer解碼器。具體細節與標準的Transformer相同&#xff0c;但位置編碼是可訓練的。 注意力機制&#xff1a; 原始Transformer的解…

ubuntu24.04 cmake 報錯 libldap-2.5.so.0 解決辦法

apt cmake有毛病 換源重新安裝 wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add - sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" sudo apt update sudo apt in…

ScholarCopilot:“學術副駕駛“

這里寫目錄標題 引言&#xff1a;學術寫作的痛點與 AI 的曙光ScholarCopilot 的核心武器庫&#xff1a;智能生成與精準引用智能文本生成&#xff1a;不止于“下一句”智能引用管理&#xff1a;讓引用恰到好處 揭秘背后機制&#xff1a;檢索與生成的動態協同快速上手&#xff1a…

vivo X200 Ultra前瞻系列(2):vivo X200 Ultra影像技術溝通會總結

vivo于今日(2025年4月14日)舉辦的“X系列藍圖影像技術溝通會”中,正式發布了vivo X200 Ultra,展示了其在移動影像領域的多項技術突破。以下是本次溝通會的核心內容總結: 1. 硬件革新:蔡司三焦段鏡頭與雙芯架構 蔡司三大定焦大師鏡頭: X200 Ultra采用14mm超廣角(“鷹眼”…

代碼隨想錄第17天:二叉樹

一、二叉搜索樹的最近公共祖先&#xff08;Leetcode 235&#xff09; 由于是二叉搜索樹&#xff0c;節點的值有嚴格的順序關系&#xff1a;左子樹的節點值都小于父節點&#xff0c;右子樹的節點值都大于父節點。利用這一點&#xff0c;可以在樹中更高效地找到最低公共祖先。 c…

C++中string庫常用函數超詳細解析與深度實踐

目錄 一、引言 二、基礎準備&#xff1a;頭文件與命名空間 三、string對象的創建與初始化(基礎&#xff09; 3.1 直接初始化 3.2 動態初始化&#xff08;空字符串&#xff09; 3.3 基于字符數組初始化 3.4 重復字符初始化 四、核心函數詳解 4.1 字符串長度相關 4.1.1 …

LanDiff:賦能視頻創作,語言與擴散模型的融合力量

自從 Wan 2.1 發布以來&#xff0c;AI 視頻生成領域似乎進入了一個發展瓶頸期&#xff0c;但這也讓人隱隱感到&#xff1a;“DeepSeek 時刻”即將到來&#xff01;就在前幾天&#xff0c;浙江大學與月之暗面聯合推出了一款全新的文本到視頻&#xff08;T2V&#xff09;生成模型…

【本地圖床搭建】寶塔+Docker+MinIO+PicGo+cpolar:打造本地化“黑科技”圖床方案

寫在前面&#xff1a;本博客僅作記錄學習之用&#xff0c;部分圖片來自網絡&#xff0c;如需引用請注明出處&#xff0c;同時如有侵犯您的權益&#xff0c;請聯系刪除&#xff01; 文章目錄 前言寶塔安裝DockerMinIO 安裝與設置cploar內網穿透PicGo下載與安裝typora安裝總結互動…

centos-LLM-生物信息-BioGPT-使用1

參考&#xff1a; GitHub - microsoft/BioGPT https://github.com/microsoft/BioGPT BioGPT&#xff1a;用于生物醫學文本生成和挖掘的生成式預訓練轉換器 |生物信息學簡報 |牛津學術 — BioGPT: generative pre-trained transformer for biomedical text generation and mini…

高效爬蟲:一文掌握 Crawlee 的詳細使用(web高效抓取和瀏覽器自動化庫)

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、Crawlee概述1.1 Crawlee介紹1.2 為什么 Crawlee 是網頁抓取和爬取的首選?1.3 為什么使用 Crawlee 而不是 Scrapy1.4 Crawlee的安裝二、Crawlee的基本使用2.1 BeautifulSoupCrawler的使用方式2.2 ParselCrawler的使…

架構總覽怎么寫,才算工業級?

??系統架構文檔是整個項目最重要的起點,但很多人第一章就“寫穿了”: 不是寫得太細,就是沒有重點。想要寫出高質量、能協作、能傳承的架構文檔,這一篇會告訴你應該怎么做—— ? 架構總覽的終極目標 明確邊界、定義角色、畫清數據流 別講執行細節,別深入函數調用。 ? 架…

優先級隊列(堆二叉樹)底層的實現:

我們繼續來看我們的優先級隊列&#xff1a; 優先級隊列我們說過&#xff0c;他也是一個容器適配器&#xff0c;要依賴我們的容器來存儲數據&#xff1b; 他的第二個參數就是我們的容器&#xff0c;這個容器的默認的缺省值是vector&#xff0c;然后他的第三個參數&#xff0c;我…

GIC驅動程序分析

今天呢&#xff0c;我們就來具體的講一下GIC的驅動源碼啦&#xff0c;這個才是重點來著&#xff0c;我們來看看&#xff1a; GIC中的重要函數和結構體&#xff1a; 沿著中斷的處理流程&#xff0c;GIC涉及這4個重要部分&#xff1a; CPU從異常向量表中調用handle_arch_irq&am…

java操作redis庫,開箱即用

application.yml spring:application:name: demo#Redis相關配置redis:data:# 地址host: localhost# 端口&#xff0c;默認為6379port: 6379# 數據庫索引database: 0# 密碼password:# 連接超時時間timeout: 10slettuce:pool:# 連接池中的最小空閑連接min-idle: 0# 連接池中的最…

Cribl 通過Splunk search collector 來收集數據

今天利用Spliunk search collector 來收集數據啦:還是要先cribl 的官方文檔: Splunk Search Collector | Cribl Docs Splunk Search Collector Cribl Stream supports collecting search results from Splunk queries. The queries can be both simple and complex, as well a…