内存函数简介

简介: 内存函数简介

一.memcpy函数:
定义:在内存中用来copy一个数组内一定字节大小的数据到另一个数组内。

头文件:#include

类型:

void memcpy(voiddest, const void *src, size_t n)

define _CRT_SECURE_NO_WARNINGS

include

include

//void my_memcpy(void s1, void s2, size_t n) {
// assert(s1 && s2);
// char
start = (char)s1;
// while (n) {
//
(char)s1 =(char)s2;
// ((char
)s1)++;
// ((char)s2)++;
// n--;
// }
// return start;//这是我们模拟实现的memcpy;但是memcpy有个缺点不能copy重叠的内存区域
//
//
//}
//int main() {
// char str1[9] = "abcdefg";
// char str2[4] = "mnk";
// /
memcpy(str1, str2, 2);*/
// my_memcpy(str1, str2, 2);
// printf("%s", str1);
// return 0;
//}

接下来会打印:

我们copy有重叠的就需要用memmove函数:

void my_memmove(void s1, void s2, size_t n) {
assert(s1 && s2);
char
ret = (char)s1;
if (s1 < s2) {
while (n) {
(char)s1 = (char)s2;
((char
)s1)++;
((char)s2)++;
n--;
}
}
else while (n) {
((char)s1 + n - 1) = ((char*)s2 + n - 1);

    n--;
}
return ret;

}//以上也是我们模拟memmove函数;
int main() {
char str1[9] = "abcdefg";
my_memmove(str1,str1+2,4);
printf("%s", str1);
return 0;
}

打印有重叠的如下:

二.memset函数:
int main() {
char str1[20] = "xxxxxxxx";
memset(str1 + 4, 'K', 2);
printf("%s", str1);
return 0;
}//如可以把从str1开始后的四个位置开始被k取代直到两个字节后
但是这个函数有个缺点无法将一个数组内所有的数据都更改,

int arr[10] = { 1,2,3,4,5,6,7,8,9,10};
memset(arr, "5", 40);
for (int i = 0; i < 10; i++) {

printf("%d", arr[i]);

}//这里将不会呈现满数组的5;

三.memcmp函数:
memcmp类似于字符串中strcmp函数;比较的是两个数组内的元素大小,输出数字跟strcmp一样

类型:

int memcmp(const void buf1, const void buf2, unsigned int count);
int main() {
char str1[10] = "abd";
char str2[5] = "af";
int ret=memcmp(str1, str2, 2);
printf("%d", ret);
}
输出结果:

四.大小端问题以及有无符号字符型问题:
1·接下来我们用一个图来解释一下:

我们来用一个代码判断机器是大小端:

int main() {
int n = 1;
if ((char)&n == 1) {
printf("小端");
}
else printf("大端");
return 0;

2·对于有无符号字符:signed char范围为-128~127,而unsigned char 为0~255 ;

首先我们要明白我们存的是补码,再不同类型进行转化我们有时便需要整型提升以及截段啥的

因此我们还要掌握我们在有符号char类型加一从0开始到127然后再加一到-128,此后不断减小,直到-1,接着变为零这样循环。

相关文章
|
5月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
56 3
|
11天前
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
JVM简介—1.Java内存区域
|
10天前
|
缓存 监控 算法
JVM简介—2.垃圾回收器和内存分配策略
本文介绍了Java垃圾回收机制的多个方面,包括垃圾回收概述、对象存活判断、引用类型介绍、垃圾收集算法、垃圾收集器设计、具体垃圾回收器详情、Stop The World现象、内存分配与回收策略、新生代配置演示、内存泄漏和溢出问题以及JDK提供的相关工具。
JVM简介—2.垃圾回收器和内存分配策略
|
13天前
|
存储 编解码 安全
阿里云高性能企业级甄选Intel第八代计算型c8i、通用型g8i和内存型r8i实例简介
计算型c8i、通用型g8i和内存型r8i实例是阿里云推出的高性能企业级甄选Intel第八代云服务器实例,采用CIPU+飞天技术架构,搭载最新的Intel 第五代至强可扩展处理器(代号EMR),性能进一步大幅提升,同时拥有AMX加持的AI能力增强,并在全球范围率先支持TDX机密虚拟机能力,实现了AI增强和全面安全防护的两大特色优势。本文将为您介绍这三个实例规格的性能、适用场景及最新活动价格以及选择指南,以供选择参考。
|
3月前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
137 6
|
5月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
5月前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
85 0
|
5月前
|
C语言 C++
c语言回顾-内存操作函数
c语言回顾-内存操作函数
65 0
|
5月前
|
存储 C语言 C++
来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp
本文详细介绍了C语言中的四个内存操作函数:memcpy用于无重叠复制,memmove处理重叠内存,memset用于填充特定值,memcmp用于内存区域比较。通过实例展示了它们的用法和注意事项。
134 0
|
5月前
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
115 0