内存管理
memset,memcpy,memcmp函数
//memset,memcpy,memcmp
#include <stdio.h>
/*****************************
#include <string.h>
void *memset(void *s, int c, size_t n); //通常情况用处清0
功能:将s的内存区域的前n个字节以参数c填入
参数:
s:需要操作内存s的首地址
c:填充的字符,c虽然参数为int,但必须是unsigned char , 范围为0~255
n:指定需要设置的大小
返回值:s的首地址
* ****************************/
#include <string.h>
#if 0 //memset
int main()
{
char num[10];
short num_int[10]; //int = 4字节
memset(num_int,0,sizeof(num_int));
memset(num,1,10); //-128 - 127
for(int i = 0; i < 10; i++)
{
printf("%d\n",num_int[i]);
}
return 0;
}
#endif
/**********************************
#include <string.h>
void *memcpy(void *dest, const void *src, size_t n);
功能:拷贝src所指的内存内容的前n个字节到dest所值的内存地址上。
参数:
dest:目的内存首地址
src:源内存首地址,注意:dest和src所指的内存空间不可重叠,可能会导致程序报错
n:需要拷贝的字节数
返回值:dest的首地址
* ****************************/
#if 0
int main()
{
int num_char1[10] = {
1,2,3,4,5,6,7};
int num_char2[10];
memcpy(num_char2,num_char1,40);
for(int i = 0; i < 10; i++)
{
printf("%d\n",num_char2[i]);
}
return 0;
}
#endif
/**********************************
#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
功能:比较s1和s2所指向内存区域的前n个字节
参数:
s1:内存首地址1
s2:内存首地址2
n:需比较的前n个字节
返回值:
相等:=0
大于:>0
小于:<0
* ****************************/
int main()
{
int num_char1[10] = {
1,2,3,4,5,6,7};
int num_char2[10] = {
1,2,3,3,5,6,7};
//memcpy(num_char2,num_char1,40);
if(memcmp(num_char1,num_char2,12) == 0)
{
printf("相等\n");
}
else
{
printf("不相等\n");
}
printf("%x\t%x\n",num_char1[3],num_char2[3]);
return 0;
}
万能指针
#include <stdio.h>