存储类型总结内存操作函数
函数 | 描述 | 参数 | 返回 |
---|---|---|---|
void *memset(void *s, int c, size_t n); | 将s指针开始到n字节的内存区域,每个字节初始化为c | ||
void *memcpy(void *dest, const void *src, size_t n); | 拷贝src所指的地址往后数n个字节到dest所值的内存地址上。 | ||
void* memmove(void* dest,const void* src,size_t num) | 和memcpy区别在于dest与src内存块可以重叠 | ||
int memcmp(const void *s1, const void *s2, size_t n); | 比较s1和s2所指向内存区域的前n个字节 |
参考:https://blog.youkuaiyun.com/tanrui519521/article/details/81164275
memset
- 对每一个字节赋值(所以除了char外 int double long等都是拆解赋值的)
参考:https://blog.youkuaiyun.com/u011426016/article/details/86559895
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int* p = (int*)malloc(sizeof(int) * 10);//按字节来申请
memset(p, 0, 40);
for (int i = 0; i < 10; i++) {
printf("%d\n", p[i]);
}
free(p);
int* q = (int*)malloc(sizeof(int) * 10);//按字节来申请
memset(q, 1, 40);//按字节来重置(int有4个字节,memset是将int的每个字节重置为1),所以只能重置为0(不能按类型大小重置)
for (int i = 0; i < 10; i++) {
printf("%d\n", q[i]);
}
free(q);
system("pause");
return EXIT_SUCCESS;
}
memcpy
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int *p = malloc(sizeof(int) * 10);
memcpy(p, arr, 40);//将栈的数组拷贝到堆区中
for (int i = 0; i < 10; i++)
{
printf("%d\n", p[i]);
}
free(p);
system("pause");
return EXIT_SUCCESS;
}