memset函数:
memset 是 C++ 标准库中的一个函数,它用于将一块内存初始化为指定的值。
1.头文件:
#include <cstring>
2.基本用法:
函数模板:
void* memset(void* ptr, int value, size_t num);
//ptr
//指向要设置值的内存块的指针。memset会在不改变指针本身的情况下,修改指针指向的内存区域
//value
//用于初始化内存块的值。
//这个值会被解释为一个字节(通常是 char),然后这个字节会被复制到内存块的每个字节位置。
//由于memset是按字节操作的,所以通常只能用0或-1以及它们的等价形式(例如 0xFF)作为value参数,因为其他值可能不会在所有位上产生期望的结果。
//num
//指定要设置的内存字节数。这个值决定了ptr指向的内存块中有多少字节会被设置为value
memset(数组首地址,初始值,初始化大小)
3.常见误区:
由于 memset 是按字节操作的,所以用于初始化非字节大小的数据类型如int float double类型的需要慎重考虑
4.示例代码:
char数组初始化:
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char arr[10];
memset(arr, 'a', 10);//从arr[0]开始,初始化10个字节的值为'a';
for(int i = 0;i < 10; ++i)
cout << arr[i] << ' '; //初始化后数组:a a a a a a a a a a
}
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char arr[10];
memset(arr, 'a', 10); //a a a a a a a a a a
memset(arr + 5, 'b', 4); //从数组首地址 + 5即arr[5]开始,初始化4个字节的值为'b';
for(int i = 0; i < 10; ++i)
cout << arr[i] << ' '; //初始化后数组 a a a a a b b b b a
}
利用sizeof计算字节数大小辅助运算
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char arr[10];
memset(arr, 'a', 10); //a a a a a a a a a a
cout << sizeof(arr) << endl; //10
memset(arr, 'c' ,sizeof(arr)); //从数组首地址开始,初始化数组大小个字节的值为'c'
for(int i = 0; i < 10; ++i)
cout << arr[i] << ' '; //c c c c c c c c c
}
对于其他数组的初始化用法:
针对于实际需求,需要将数组初始化为 0 的时候就用 0,需要初始化为最大值的时候用0x3f
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int intArray[5];
memset(intArray, 0, sizeof(intArray));
for (int i = 0; i < 5; i++)
cout << intArray[i] << " "; // 0 0 0 0 0
cout << endl;
memset(intArray, 0x3f, sizeof(intArray));
for (int i = 0; i < 5; i++)
cout << intArray[i] << " "; //1061109567 1061109567 1061109567 1061109567 1061109567
return 0;
}
memcpy函数:
1.头文件:
#include <cstring>
2.基本用法:
memcpy 是 C++ 标准库中用于内存操作的函数之一,它定义在 <cstring> 头文件中。memcpy 函数的主要功能是在内存中复制一定数量的字节,从源地址(source)到目标地址(destination)。
void* memcpy(void* destination, const void* source, size_t num);
-
destination(目标地址): 指向要复制内容的目标内存块的指针。复制操作不会改变这个指针的值。 -
source(源地址): 指向要复制内容的源内存块的指针。这个指针指向的数据将被复制到目标内存块。 -
num(字节数): 指定要复制的字节数。这个值表示从源地址到目标地址复制的字节数量。 -
3.示例代码
-
#include <iostream> #include <cstring> using namespace std; int main() { char source[] = "Hello, world!"; char destination[15]; cout << strlen(source) << endl; // 13 memcpy(destination, source, strlen(source) + 1); //strlen函数用于计算source数组字符串长度 cout << destination << endl; //Hello, world! return 0; }memcpy 函数会将源内存区域中的 n 个字节的数据复制到目标内存区域,可能包含原先的内容。函数不会检查边界,因此保证源和目标内存区域的大小至少为 n 非常重要。
学习时整理,不当之处烦请指正
码字不易,留个赞再走吧
记于2024.10.10
2722

被折叠的 条评论
为什么被折叠?



