C语言四种内存函数

一、memcpy函数

1.基本格式:

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

2.功能概要:

将source中的num个字节的内容复制到destination中

3.用法举例:

int main()
{
    int arr2[] = { 1,2,3,4,5,6,7,8,9,10 };
    int arr1[11] = { 0,1,2,3,4,5,6,7,8,9,10 };
    memcpy(arr1, arr2, 10 * sizeof(int));
    int i = 0;
    for (i = 0;i < 11; i++)
    {
        printf("%d ", arr1[i]);
    }
    return 0;
}

结果分析:输出1 2 3 4 5 6 7 8 9 10 10

arr1中的前十个数被arr2前十个替换。

二、memmove函数

1.基本格式:

void * memmove ( void * destination, const void * source, size_t num )

2.功能概要:

在同一个数组当中,对于目标和源头其中有重叠的部分,进行复制。

3.用法举例:

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	memmove(arr + 2, arr, 5 * sizeof(int));
	int i = 0;
	for (i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
		printf("%d ", arr[i]);
	return 0;
}

结果分析:输出1 2 1 2 3 4 5 8 9 10

指针变量arr指向源头,指针变量arr+2指向目标,源头后面5*sizeof(int)个字节的内容被复制给了目标。

三、memset函数

1.基本格式:

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

2.功能概要:

memset函数为内存设置函数,

以字节为单位,将ptr中前num个字节设置为value

3.用法举例:

①:

int main()
{
	char arr[] = "hello world";
	memset(arr, 'x', 5);
	printf("%s\n", arr);
	return 0;
}

结果分析:输出xxxxx world

arr中前五个字节对应的字符被替换成了‘x’,并直接打印。

②:

int main()
{
	int arr[10] = { 0 };
	memset(arr, 1, 10 * sizeof(int));
	int i = 0;
	for(i=0;i<10;i++)
	printf("%d ", arr[i]);
	return 0;
}

结果分析:输出16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009

memset将arr中每一个字节都设置为了1,用16进制表示就是01010101,转为10进制即16843009

四、memcmp函数

1.基本格式:

int memcmp ( const void * ptr1, const void * ptr2, size_t num )

2.功能概要:

比较ptr1和ptr2的大小关系,包括各种类型。

3.用法举例:

int main()
{
	int h = 0;
	int arr1[] = { 1,2,3,4,5,6,7,8 };
	int arr2[] = { 1,2,3,4,7 };
	h = memcmp(arr1, arr2, 17);
	printf("%d\n", h);
	return 0;
}

结果分析:输出-1

比较的过程是一个字节一个字节的比较,测试所用编译器为小端存储,所以比较17个字节的时候,前16个相同,第17个是05与08比较;

当ptr1分别大于,等于,小于ptr2的时候,返回值分别为-1,0,1,这点和strcmp很像。

例子里05<08,输出-1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值