C語言內存函數與數據在內存中的存儲

一、c語言內存函數

1、memcpy函數是一個標準庫函數,用于內存復制。功能上是用來將一塊內存中的內容復制到另一塊內存中。用戶需要提供目標地址源地址以及要復制的字節數。例如結構體之間的復制。

memcpy函數的原型是:void* memcpy(void* dest,const void* src,size_t num)這里dest是目標指針、src是源指針,num是要復制的字節數。需要注意的是:src指向的內容在復制過程中不會被修改,所以用const修飾。

注意事項:

  1. 調用memcpy前需確保源內存與目標內存區域無重疊,否則應使用?memmove
  2. 目標緩沖區大小應足夠容納拷貝數據,防止發生緩沖區溢出
  3. 第三個參數表示拷貝的字節數,建議使用?sizeof?運算符進行計算
  4. 處理結構體或包含指針的數據時,需注意淺拷貝可能導致的問題
  5. 源指針和目標指針必須為有效指針,禁止傳入空指針

注:strcpy只針對字符串,memcpy不在乎內存中存放什么數據,

#include<stdio.h>
#include<string.h>
int main()
{char src[] = "hello";char dest[10] = { 0 };memcpy(dest, src, sizeof(src));printf("%s\n", dest);return 0;
}

2、memmove函數(可以處理不重疊的情況)

void* memmove(void* dest,const void* src,size_t num),用戶需要提供目標地址源地址以及要復制的字節數。這里dest是目標指針、src是源指針,num是要復制的字節數。需要注意的是:src指向的內容在復制過程中不會被修改,所以用const修飾。

#include<stdio.h>
#include<string.h>
int main()
{char str[] = "abcdefgh";//源和目標重疊,將從下標2的位置開始,復制5個字符到下標為4的位置memmove(str + 4, str + 2, sizeof(str));printf("%s\n", str);return 0;
}

3、memset內存設置函數

void* memset( void* ptr ,int value,size_t num),value是設置的值,ptr指向被填充的內存塊,num是要修改的字節數。(將內存中的值以字節為單位設置成想要的內容;只能改字節,不能改元素)

int main()
{char str[] = "Hello,world";memset(str, '6', 5 * sizeof(char));printf("%s\n", str);return 0;
}

4、memcmp函數(內存比較)

int memcmp(const void* ptr1,const void* ptr2,size_t num),比較從ptr1和ptr2指針指向的位置開始向后的num個字節的內容,如果倆個內存的內容完全相同,函數返回0;若ptr1所指向的內存區域在字典序上小于ptr2所指向的內存區域,函數返回一個小于0的值;如果ptr1所指向的內存區域在字典序上大于ptr2所指向的內存區域,函數返回一個大于0的值。使用方法如下:

int main()
{char str1[] = "abcdefgz";char str2[] = "abcdefgj";int end=memcmp(str1, str2,8);printf("%d", end);return 0;

二、整型數據在內存中的存儲

1、對于整形數組是來說:數據存放是放在內存中其實存放的是二進制的補碼,在輸出時要將補碼換為原碼!

2、大小端儲存方式

(1)大端儲存方式:數據的低位字節內容保存在內存的高地址位,而數據的高位字節內容,保存在內存的低地址處。

(2)小端儲存方式:數據的低位字節內容保存在內存的低地址處,而數據的高位字節內容保存在內存的高地址處。

三、浮點數在內存中的存儲

任意一個二進制浮點數V可以表示成這種形式:V=(-1)^s*M*2^E,先將浮點數轉換成二進制;(-1)^s表示符號位,s=0,V為正數,當s=1時,V為負數,M表示有效數字,M是大于等于1小于2的,2^E表示指數位。

先將浮點數轉換為二進制。

對于32位的浮點數·(float),最高的1位存儲符號位S,接著的8位存儲指數E,剩下的23位存儲有效數字M。

對于double類型的浮點數內存分配(8字節,64比特),存儲方式符下:

在保存時M可以寫成1.xxxxx的形式,其xxxxx表示小數部分。IEEE754規定在計算機內部保存M時,默認這個數第一位總是1,因此可以被消去。只保留1后的xxxxx部分就可以了,eg.1.01保存時只需要保存01,等讀取時再把第一位加上,這樣做是節省一位有效數字。

E是無符號整數,E為8位,它的取值范圍是0-->255;如果E為11位,它的值為0-->2047.

科學計數法中E可以為負數,所以IEEE754規定,存入內存時E的真實值必須再加一個中間數,對于8為E,這個數是127;對于E是11位時,這個中間數是1023。

比如:2^10的E是10,所以保存為32位浮點數時,必須保存成10+127=137

即:10001001

E真實值+127/1023=E的存儲值

浮點數取的過程中:

(1)E不全為0或者不全為1(常規情況)

0.5的二進制形式是0.1,規定有效數字部分必須為1,就是1.0*2^(-1),其階碼為-1+127=126(表示為:01111110),而尾數1.0去掉整部分后為0,補齊0到23位。如下圖:以float儲存為例:

(2)E全為0,此時浮點數的指數E(真實值)=1-127/1023,有效數字M不再加上第一位的1,而是還原為0.xxxxx的小數,這是表示正負0,以及接近0的很小的數字。

(3)E全為1,如果有效數字M全為0,表示正負無窮大。(正負取決于符號位S)

注:IEEE754是浮點數表示的標準

如有不足之處,請大家指出,謝謝!!!

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

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

相關文章

層次原理圖

層次原理圖簡介 層次原理圖&#xff08;Hierarchical Schematic&#xff09;是一種常用于電子工程與系統設計的可視化工具&#xff0c;通過分層結構將復雜系統分解為多個可管理的子模塊。它如同“設計藍圖”&#xff0c;以樹狀結構呈現整體與局部的關系&#xff1a;頂層展現系…

流程編輯器Bpmn與LogicFlow學習

工作流技術如何與用戶交互結合&#xff08;如動態表單、任務分配&#xff09;處理過 XML 與 JSON 的轉換自定義過 bpmn.js 的樣式&#xff08;如修改節點顏色、形狀、圖標&#xff09;擴展過上下文菜單&#xff08;Palette&#xff09;或屬性面板&#xff08;Properties Panel&…

LWIP的NETCONN接口

NETCONN接口簡介 NETCONN API 使用了操作系統的 IPC 機制&#xff0c; 對網絡連接進行了抽象&#xff0c;使用同一的接口完成UDP和TCP連接 NETCONN API接口是在RAW接口基礎上延申出來的一套API接口 NETCONN實現原理 2.1&#xff0c;NETCONN控制塊 2.2&#xff0c;NETCONN收…

Linux搜索

假如我們要搜索 struct sockaddr_in 我們在命令終端輸入 cd/usr/include/ //進入頭文件目錄地址 /usr/include/ grep " struct sockaddr_in { " *-nir &#xff08;*是在當前目錄&#xff0c;n 是找出來顯示行數…

2025長三角杯數學建模B題思路模型代碼:空氣源熱泵供暖的溫度預測,賽題分析與思路

2025長三角杯數學建模B題思路模型代碼&#xff0c;詳細內容見文末名片 空氣源熱泵是一種與中央空調類似的設備&#xff0c;其結構主要由壓縮主機、熱交換 器以及末端構成&#xff0c;依靠水泵對末端房屋提供熱量來實現制熱。空氣源熱泵作為熱 慣性負載&#xff0c;調節潛力巨…

ssh免密碼登錄

創建秘鑰和公鑰 ssh-keygen -t rsa 輸入上述命令后&#xff0c;直接按回車即可&#xff0c;完成后會在上面信息顯示&#xff0c;生成的文件路徑信息 id_rsa&#xff1a;秘鑰 id_rsa.pub&#xff1a; 公鑰 將公鑰的內容copy到遠端 將id_rsa.pub的內容拷貝到~/.ssh下的authori…

基于Bootstrap 的網頁html css 登錄頁制作成品

目錄 前言 一、網頁制作概述 二、登錄頁面 2.1 HTML內容 2.2 CSS樣式 三、技術說明書 四、頁面效果圖 前言 ?Bootstrap?是一個用于快速開發Web應用程序和網站的前端框架&#xff0c;由Twitter的設計師Mark Otto和Jacob Thornton合作開發。 它基于HTML、CSS和JavaScri…

20倍云臺球機是一種高性能的監控設備

20倍云臺球機是一種高性能的監控設備&#xff0c;其主要特點包括20倍光學變焦能力和云臺旋轉功能。以下是對20倍云臺球機的詳細分析&#xff1a; 一、主要特點 20倍光學變焦 &#xff1a; 攝像機鏡頭能夠在保持圖像清晰度的前提下&#xff0c;將監控目標放大20倍。 這一功能…

大型語言模型應用十大安全風險

40多頁LLM應用的十大風險 這是一份關于LLM應用的十大風險&#xff08;2025版&#xff09;&#xff0c;有一定的參考價值。 如果你時間充裕&#xff0c;可以聽聽播客&#xff0c;詳細了解&#xff1a; 如果你只想快速了解10條分別是什么&#xff0c;可以直接看重點摘錄&#xff…

一文掌握工業相機選型計算

目錄 一、基本概念 1.1 物方和像方 1.2 工作距離和視場 1.3 放大倍率 1.4 相機芯片尺寸 二、公式計算 三、實例應用 一、基本概念 1.1 物方和像方 在光學領域&#xff0c;物方&#xff08;Object Space&#xff09;是與像方&#xff08;Image Space&#xff09;相對的…

《虛擬即真實:數字人驅動技術在React Native社交中的涅槃》

當React Native與數字人驅動技術相遇&#xff0c;它們將如何攜手塑造社交應用中智能客服與虛擬主播的自然交互呢&#xff1f;這正是本文要深入探討的話題。 React Native是Facebook開源的一個用于構建原生移動應用的框架&#xff0c;它允許開發者使用JavaScript和React編寫代碼…

使用AI 生成PPT 最佳實踐方案對比

文章大綱 一、專業AI生成工具(推薦新手)**1. 推薦工具詳解****2. 操作流程優化****3. 優勢與局限**二、代碼生成方案(開發者推薦)**1. Python-pptx進階用法****2. GitHub推薦**三、混合工作流(平衡效率與定制)**1. 工具鏈升級****2. 示例Markdown結構**四、網頁轉換方案(…

前端-HTML元素

目錄 HTML標簽是什么&#xff1f; 什么是HTML元素&#xff1f; HTML元素有哪些分類方法&#xff1f; 什么是HTML頭部元素 更換路徑 注&#xff1a;本文以leetbook為基礎 HTML標簽是什么&#xff1f; HTML標簽是HTML語言中最基本單位和重要組成部分 雖然它不區分大小寫&a…

菱形繼承原理

在C中&#xff0c;菱形繼承的內存模型會因是否使用虛繼承產生本質差異。我們通過具體示例說明兩種場景的區別&#xff1a; 一、普通菱形繼承的內存模型 class A { int a; }; class B : public A { int b; }; class C : public A { int c; }; class D : public B, public C { i…

2025認證杯數學建模第二階段A題小行星軌跡預測思路+模型+代碼

2025認證杯數學建模第二階段思路模型代碼&#xff0c;詳細內容見文末名片 一、問題重述 1.1 問題背景 在浩瀚無垠的宇宙中&#xff0c;近地小行星&#xff08;NEAs&#xff09;宛如一顆顆神秘的“太空子彈”&#xff0c;其軌道相對接近地球&#xff0c;給我們的藍色星球帶來…

掌握Docker Commit:輕松創建自定義鏡像

使用 docker commit 命令可以通過對現有容器進行修改來創建新的鏡像。-a 選項用于指定作者信息&#xff0c;-m 選項用于添加提交信息。以下是具體步驟&#xff1a; 啟動并修改容器 啟動一個容器并進行必要的修改。例如&#xff0c;啟動一個 Ubuntu 容器并安裝一些軟件包&…

Java虛擬機 - JVM與Java體系結構

Java虛擬機 JVM與Java體系結構為什么要學習JVMJava與JVM簡介Java 語言的核心特性JVM&#xff1a;Java 生態的基石JVM的架構模型基于棧的指令集架構&#xff08;Stack-Based&#xff09;基于寄存器的指令集架構&#xff08;Register-Based&#xff09;JVM生命周期 總結 JVM與Jav…

【PostgreSQL系列】PostgreSQL 復制參數詳解

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

阿里巴巴開源移動端多模態LLM工具——MNN

MNN 是一個高效且輕量級的深度學習框架。它支持深度學習模型的推理和訓練&#xff0c;并在設備端的推理和訓練方面具有行業領先的性能。目前&#xff0c;MNN 已集成到阿里巴巴集團的 30 多個應用中&#xff0c;如淘寶、天貓、優酷、釘釘、閑魚等&#xff0c;覆蓋了直播、短視頻…

Vue.js---watch 的實現原理

4.7 watch 的實現原理 watch本質上就是使用了effect以及options.scheduler 定義watch函數&#xff1a; // watch函數:傳入參數source以及回調函數function watch(source , cb) {effect(() > source.foo,{scheduler(){// 回調函數cb()}})}watch接收兩個參數分別是source和c…