c/c++内存库函数

内存操作库函数memset
头文件cstring中声明:
void * memset(void * dest,int ch,int n);
将从dest开始的n个字节,都设置成ch。返回值是dest。ch只有最低的字节起
作用。
内存操作库函数memset
头文件cstring中声明:
void * memset(void * dest,int ch,int n);
将从dest开始的n个字节,都设置成ch。返回值是dest。ch只有最低的字节起
作用。
例:将szName的前10个字符,都设置成'a':
char szName[200] = " ";
memset( szName,'a',10);
cout << szName << endl;
=>aaaaaaaaaa
内存操作库函数memset
用memset函数将数组内容全部设置成0:
int a[100];
memset(a,0,sizeof(a));
则数组a的每个元素都变成0
内存操作库函数memcpy
头文件cstring中声明:
void * memcpy(void * dest, void * src, int n);
将地址src开始的n个字节,拷贝到地址dest。返回值是dest。
内存操作库函数memcpy
头文件cstring中声明:
void * memcpy(void * dest, void * src, int n);
将地址src开始的n个字节,拷贝到地址dest。返回值是dest。
将数组a1的内容拷贝到数组a2中去,结果是a2[0] = a1[0], a2[1] =
a1[1]……a2[9] = a1[9] :
int a1[10];
int a2[10];
memcpy( a2, a1, 10*sizeof(int));
如何编写内存操作库函数memcpy
void * MyMemcpy( void * dest , const void * src, int n)
{
char * pDest = (char * )dest;
char * pSrc = ( char * ) src;
for( int i = 0; i < n; ++i ) {
//逐个字节拷贝源块的内容到目的块
* (pDest + i) = * ( pSrc + i );
}
return dest;
}
如何编写内存操作库函数memcpy
void * MyMemcpy( void * dest , const void * src, int n)
{
char * pDest = (char * )dest;
char * pSrc = ( char * ) src;
for( int i = 0; i < n; ++i ) {
//逐个字节拷贝源块的内容到目的块
* (pDest + i) = * ( pSrc + i );
}
return dest;
}



内存操作库函数应用举例        void在函数中的运用qsort

#include <iostream>
using namespace std;
struct A {
 int nouse1;
 int nouse2;
 int n;
};
//**************************************************************************************
void mysort(void *a,int n,int w,int(*f)(const void * e1,const void * e2))
{
 char *s=(char*)a;
 for(int i=0;i<n-1;i++){
  for(int j=i+1;j<n;j++){
   char *p1=(char*)a+i*w;
   char *p2=(char*)a+j*w;
   if(f(p1,p2)>0){
    for(int k=0;k<w;k++){
     char tem=p1[k];
     p1[k]=p2[k];
     p2[k]=tem;
    }
   }
  }
 }
}
int mysort(void* a, int n, int w, int(*compare)(const void* e1, const void* e2)) {
     char* s = (char*)a;
     for(int i=n-1; i>=0; --i)
         for(int j=0; j<i; ++j) {
              char* p1 = (char*)a+j*w;
             char* p2 = (char*)a+j*w+w;
             if(compare(p1,p2) > 0) {
                 for(int k=0; k<w; ++k) {
                     char tmp = p1[k];
                     p1[k] = p2[k];
                     p2[k] = tmp;
                 }
             }
         }
}
//*********************************************************************************************
int MyCompare1( const void * e1,const void * e2)
{
 int * p1 = (int * ) e1;
 int * p2 = (int * ) e2;
 return * p1 - * p2;
}
int MyCompare2( const void * e1,const void * e2)
{
 int * p1 = (int * ) e1;
 int * p2 = (int * ) e2;
 if( (* p1 %10) - (* p2 % 10))
  return (* p1 %10) - (* p2 % 10);
 else
  return * p1 - * p2;
}
int MyCompare3( const void * e1,const void * e2)
{
 A * p1 = (A*) e1;
 A * p2 = (A*) e2;
 return p1->n - p2->n;
}
int a[20];
A b[20];
int main ()

freopen("C:\\Users\\Administrator\\Desktop\\text.txt","r",stdin);
 int n;
 while(cin >> n) {
  for(int i = 0;i < n; ++i) {
   cin >> a[i];
   b[i].n = a[i];
  }
  mysort(a,n,sizeof(int),MyCompare1);
  for(int i = 0;i < n; ++i)
   cout << a[i] << "," ;
  cout << endl;
  mysort(a,n,sizeof(int),MyCompare2);
  for(int i = 0;i < n; ++i)
   cout << a[i] << "," ;
  cout << endl;
  mysort(b,n,sizeof(A),MyCompare3);
  for(int i = 0;i < n; ++i)
   cout << b[i].n << "," ;
  cout << endl;
 }
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值