内存操作库函数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;
}