【C語言】知識總結·內存函數

目錄

前言:

一、內存復制函數?

1.?memcpy?- 內存塊復制?

2.?memmove?- 內存塊移動

二、內存設置函數

1.?memset?- 內存塊填充

三、內存比較函數

1.?memcmp?

2.memchr

三·內存分配函數

1 .malloc

2.free

?總結:

注意事項:


前言:

在 C 語言中,內存函數是用于直接操作內存區域的函數,它們位于<string.h>頭文件中。這些函數不依賴于特定的數據類型,而是基于內存地址和字節操作,因此具有很高的通用性。

以下是 C 語言中核心內存函數的詳細總結:


一、內存復制函數?

1.?memcpy?- 內存塊復制?

void *memcpy(void *dest, const void *src, size_t n);
  • 功能:從src復制n個字節到dest
  • 注意
    • destsrc內存區域重疊,結果未定義(推薦使用memmove處理重疊情況)。
    • 返回指向dest的指針。

?示例:

#include <stdio.h>
#include <string.h>
int main()
{int arr1[5] = { 1, 2, 3, 4, 5 };int arr2[5];memcpy(arr2, arr1, sizeof(arr1)); // 復制整個數組將1 的復制到2for (int i = 0;i < 5;i++){printf("%d ", arr2[i]);}return 0;
}

2.?memmove?- 內存塊移動

void *memmove(void *dest, const void *src, size_t n);
  • 功能:將n個字節的數據從源內存區域src復制到目標內存區域dest,可以處理源和目標內存塊重疊的情況。

  • 原型void *memmove(void *dest, const void *src, size_t n);

  • 示例

    char str[] = "memmove can be very useful......";
    memmove(str + 20, str + 15, 11);
    
  • 返回值:返回目標存儲區dest的指針。

示例:

int arr[10] = {0,1,2,3,4,5,6,7,8,9};
// 將前5個元素后移2位
memmove(arr+2, arr, 5 * sizeof(int));
// 結果:arr = {0,1,0,1,2,3,4,7,8,9}
for (int i = 0;i < 10 ;i++)
{printf("%d ", arr[i]);
}


二、內存設置函數

1.?memset?- 內存塊填充

  • 功能:將s的前n個字節設置為字符c(轉換為unsigned char)。
  • 常見用途
    • 初始化數組為 0:memset(arr, 0, sizeof(arr));
    • 初始化結構體:memset(&obj, 0, sizeof(obj));

示例:?

char str[10];
memset(str, 'A', 5); // str = "AAAAA\0\0\0\0\0"

后面為亂序自由生成?


三、內存比較函數

1.?memcmp?

int memcmp(const void *s1, const void *s2, size_t n);
  • 功能:比較s1s2的前n個字節。
  • 返回值
    • 如果s1 < s2,返回一個小于0的值。
    • 如果s1 == s2,返回0。
    • 如果s1 > s2,返回一個大于0的值

示例:

int arr1[3] = {1, 2, 3};
int arr2[3] = {1, 2, 4};
int result = memcmp(arr1, arr2, sizeof(arr1)); // result < 0

2.memchr

  • 功能:在s指向的內存區域的前n個字節中查找字符c
  • 原型void *memchr(const void *s, int c, size_t n);
  • 返回值
    • 如果找到字符c,返回指向該字符的指針。
    • 如果未找到字符c,返回NULL

示例:

char str[] = "hello world";
char *ptr = memchr(str, 'w', strlen(str));

三·內存分配函數

雖然題目主要集中在內存操作函數上,但為了完整性,這里也簡要介紹幾個常用的內存分配函數:

1 .malloc

  • 功能:動態分配指定大小的內存空間。

  • 原型void *malloc(size_t size);

  • 示例

    int *ptr = (int *)malloc(5 * sizeof(int));

  • 注意事項:分配的內存需要使用free函數釋放,否則會導致內存泄漏。

2.free

  • 功能:釋放之前通過malloccallocrealloc分配的內存。
  • 原型void free(void *ptr);
  • 示例
    free(ptr);

?總結:

注意事項:

  • 動態分配的內存需要及時釋放(free),以避免內存泄漏。
  • 使用這些函數時,確保提供的指針和大小參數是有效的,以防止未定義行為。

C語言 知識點到此大部分講述完畢,文件操作咱們下章再見!!!!

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

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

相關文章

python+uniapp基于微信小程序面向品牌會員的在線商城系統

文章目錄 具體實現截圖本項目支持的技術路線源碼獲取詳細視頻演示&#xff1a;文章底部獲取博主聯系方式&#xff01;&#xff01;&#xff01;&#xff01;本系統開發思路進度安排及各階段主要任務java類核心代碼部分展示主要參考文獻&#xff1a;源碼獲取/詳細視頻演示 ##項目…

小魚fish系統 sudo apt update報錯(密鑰失效)

在使用小魚fish提供的系統鏡像文件&#xff0c;sudo apt update系統更新時遇到了以下報錯&#xff0c;即ROS 2 倉庫的 GPG 密鑰已過期&#xff0c;以及 Docker 倉庫使用了過時的密鑰存儲方式 fishrosfishros-linux:~$ sudo apt update 獲取:1 http://mirrors.tuna.tsinghua.ed…

深度優先搜索 (DFS) 詳解

1. 什么是深度優先搜索&#xff1f; 深度優先搜索&#xff08;Depth-First Search, DFS&#xff09;是一種用于遍歷或搜索樹或圖的算法。這個算法會盡可能深地搜索樹的分支。當節點v的所在邊都已被探尋過&#xff0c;搜索將回溯到發現節點v的那條邊的起始節點。這一過程一直進…

文心4.5開源大模型的使用和部署

前言 就在今天&#xff0c;文心4.5模型開源了&#xff0c;不是一個&#xff0c;而是整個系列模型正式開源。很突然&#xff0c;我都震驚了。文心4.5系列開源模型共10款&#xff0c;涵蓋了激活參數規模分別為47B 和3B 的混合專家&#xff08;MoE&#xff09;模型&#xff08;最…

HarmonyOs開發之——TypeScript介紹、入門,及 TypeScript、JavaScript、ArkTs的具體區別解讀。

HarmonyOs開發之——TypeScript介紹、入門&#xff0c;及 TypeScript、JavaScript、ArkTs的具體區別解讀。 一、 開發語言介紹&#xff1a; TypeScript是JavaScript的超集&#xff0c;ArkTS則是TypeScript的超集。ArkTs是 HarmonyOs的主力開發語言&#xff0c;它在TypeScript…

《JMS事務性會話徹底解析:消息監聽中的 commit、rollback 和冪等設計》

大家好&#xff0c;我是G探險者&#xff01; &#x1f4cc; 場景引入 在實際項目中&#xff0c;我們常常面臨以下挑戰&#xff1a; 監聽 MQ 消息失敗了&#xff0c;希望自動重試&#xff1f;消費 MQ 消息后&#xff0c;要寫數據庫&#xff0c;但中間報錯了&#xff1f;消息處…

vue3 el-table 列增加 自定義排序邏輯

在 Vue 3 中使用 Element Plus 的 <el-table> 組件時&#xff0c;如果你想增加自定義排序邏輯&#xff0c;可以通過以下幾個步驟實現&#xff1a; 1. 使用 default-sort 屬性 首先&#xff0c;你可以在 <el-table> 組件上使用 default-sort 屬性來指定默認的排序…

ISP Pipeline(7): Gamma Correction 伽馬校正

AI_Plays/ISP/Fast_ISP_Progress.ipynb at main ameengee/AI_Plays GitHub Gamma Correction&#xff08;伽馬校正&#xff09;是圖像處理中的一個重要步驟&#xff0c;目的是調整圖像的亮度&#xff0c;使其更符合人眼的感知或顯示設備的特性。 為什么需要 Gamma Correcti…

AI提取伴奏,實現卡拉OK效果 —— 「suno api/luno api/kuka api」

導讀 喜歡唱歌&#xff0c;卻總苦于找不到純凈的伴奏&#xff1f;或者你想把喜歡的歌曲翻唱一遍&#xff0c;卻被人聲干擾搞得頭大&#xff1f;現在&#xff0c;AI技術已經悄悄解決了這個問題。借助AI智能工具&#xff0c;你可以輕松提取任何一首歌的伴奏&#xff0c;享受宛如…

pip介紹

pip是什么&#xff1f; pip&#xff08;Pip Installs Packages&#xff09;是Python的官方管理工具&#xff0c;用于安裝、升級、卸載和管理Python第三方庫及其依賴關系。它是Python生態系統的核心組件&#xff0c;通過連接PyPI&#xff08;Python Package Index&#xff09;這…

機器學習20-線性網絡思考

機器學習20-線性網絡思考 針對線性網絡的基礎問題&#xff0c;使用基礎示例進行解釋 1-核心知識點 1-線性模型家族的線性回歸和邏輯回歸分別是什么&#xff0c;線性模型家族還有沒有其他的模型 線性模型家族是一系列基于線性假設的統計模型&#xff0c;它們假設因變量和自變量…

【科研繪圖系列】R語言繪制世界地圖分布(world map)

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹加載R包數據下載導入數據數據預處理準備畫圖畫圖總結系統信息介紹 本教程旨在通過R語言及其相關地理空間分析包,展示如何對環境數據進行空間聚類分析,并將結果可視化。教程從讀…

Armbian 25.5.1 Noble Gnome 開啟遠程桌面功能

sudo apt install gnome-remote-desktop ----長話短說 故障表現 Ubuntu 25版本點擊遠程桌面功能沒有任何反應, WIN_20250630_00_53_24_Pro 最后 armbian 官方社區充滿了傲慢,一言不合就關閉話題,問題都沒有解決就給我關閉了 最后檢索到英文網站,說到了這么一句話,檢查遠程桌…

嵌入式 Linux 入門:從裸機到系統級開發的第一步

隨著嵌入式系統應用的不斷深入&#xff0c;很多 MCU 項目開發者會在某個階段遇到瓶頸&#xff1a;系統越來越復雜、任務越來越多、通信越來越頻繁、性能要求越來越高。 這時候&#xff0c;從 MCU / RTOS 過渡到 嵌入式 Linux 開發 就成為一次技術升級的關鍵轉折點。 本文將帶…

詳解 Blazor 組件傳值

父子組件傳值 在 Blazor 中&#xff0c;組件之間的通信可以通過 [Parameter] 參數和 EventCallback<T> 事件回調實現。下面分別給出 父組件傳遞值給子組件 和 子組件傳遞值給父組件 的簡單示例。 1.1 父組件傳遞值給子組件 步驟&#xff1a; 在子組件中定義 public 屬…

力扣熱題100再刷

160.相交鏈表 讀一遍A&#xff0c;一個set存節點&#xff0c;遍歷B的時候判斷即可。復習下set的STL&#xff1a;set有set和unordered_set&#xff0c;同樣有insert&#xff0c;find&#xff0c;count&#xff0c;對于set而言&#xff0c;自動從小到大排序&#xff0c;還有&…

MySQL常用函數性能優化及索引影響分析

MySQL 常用函數性能優化指南&#xff08;含索引影響分析&#xff09; 以下是 MySQL 函數使用指南&#xff0c;新增性能影響評級、索引失效分析和優化方案&#xff0c;幫助您高效使用函數&#xff1a; &#x1f4dc; 一、字符串處理函數&#xff08;含性能分析&#xff09; 函…

莫隊(基礎版)優雅的暴力

莫隊算法是一種離線算法&#xff0c;常用于高效處理區間查詢問題。它通過合理排序和移動左右端點來減少時間復雜度。 基本思想 莫隊算法的核心思想是將所有查詢離線排序&#xff01;&#xff01;&#xff08;找出一個過起來最快的查詢順序&#xff09;&#xff0c;然后通過移動…

? Python 高級定制 | 美化 Word 表格邊框與樣式(收貨記錄增強版)

之前我們完成了 Excel 數據提取、Word 表格寫入與合并&#xff0c;現在繼續 為 Word 表格添加高級樣式 裝扮&#xff0c;包括單元格邊框、背景填色、居中對齊、粗體、高亮行/列等&#xff0c;進一步增強表格的可讀性與專業性。 &#x1f58c;? 樣式設置函數 1. 設置單元格邊框…

Clickhouse源碼分析-TTL執行流程

第一種情況&#xff1a;無ttl_only_drop_parts配置 總體示例以及說明 如果沒有ttl_only_drop_parts的配置&#xff0c;過期數據的刪除&#xff08;這里是刪除&#xff0c;是將過期的數據從這個part刪除&#xff0c;并將過期的數據構成一個part&#xff0c;這個過期的part標記…