C++ memset设置数组内容和memcpy拷贝数组内容的介绍与使用

目录

一.memset使用

设置数组内容:

错误使用:

二.memcpy拷贝数组内容


一.memset使用

        函数原型如下:

        void * memset ( void * ptr, int value, size_t num );

        参数解释: ptr -- 指针:指向了要设置的内存块的起始位置

        value -- 要设置的值

        num -- 设置的字节个数

        memset 是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容,需要头⽂件 。

设置数组内容:

#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
 char str[] = "hello world";
 memset(str, 'x', 6);
 cout << str << endl;
 
 int arr[] = {1,2,3,4,5};
 memset(arr, 0, sizeof(arr));//这⾥数组的⼤⼩也可以⾃⼰计算 
 for(auto i : arr)
 {
 cout << i << " ";
 }
 cout << endl;
 return 0;
}

输出结果:

错误使用:

#include <iostream>
using namespace std;
int main ()
{
 int arr[] = {1,2,3,4,5};
 memset(arr, 1, 4 * sizeof(int));
 for(auto e : arr)
 {
 cout << e << " ";
 }
 cout << endl;
 return 0;
}

注意memsert是以字节为单位就行设置的。

从上⾯打印结果可以看出,当value设置为1或者其他⾮0的数字时,打印结果不符合预期。 主要原因是 memset 函数是给每个字节设置 value 值,⽽⼀个整型元素占⽤4个字节,⼀个整型的 每个字节都被设置为1,⼆进制就是: 00000001000000010000000100000001 ,转换成⼗进制 就是: 16843009 ,因此结果是不符合预期的。如下图所⽰:

二.memcpy拷贝数组内容

在使⽤数组的时候,有时候我们需要将数组a的内容给数组b,⽐如:

int a[10] = {1,2,3,4,5,6,7,8,9,10};

   int b[10] = {0};

C++中有⼀个库函数 memcpy 可以做数组内容的拷⻉,当然 memcpy 其实是⽤来做内存块的拷⻉ 的,当然⽤来做数组内容的拷⻉也是没问题的。memcpy需要的头⽂件是 <cstring>

 函数原型如下:

void * memcpy ( void * destination, const void * source, size_t num );

//destination -- ⽬标空间的起始地址

//source -- 源数据空间的起始地址

//num -- 拷⻉的数据的字节个数

代码举例:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
 int a[10] = {1,2,3,4,5,6,7,8,9,10};
 int b[10] = {0};
 memcpy(b, a, 10 * sizeof(int));
 for(int e: b)
 {
 cout << e << " ";
 }
 return 0;
}

当然如果拷⻉ double 类型的数组时,计算时应该使⽤ sizeof(double) ,要灵活变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值