memcpy(b,a,sizeof(int )k)函数的头文件是#include<*string.h>,如果数组a,b都是浮点型复制是要写成memcpy(b,a,sizeof(double )*k)若是全复制则memcpy(b,a,sizeof(a)),即把a全复制给b。
下面代码是memcpy函数,sort函数,menset函数综合。
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#include<algorithm>
#include<memory.h>
bool comp(const int a,const int b)
{
return a>b;
}
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,0};
int b[10];
memcpy(b,a,sizeof(a));
int i;
for(i = 0; i < 10; i ++)
printf("%d ",a[i]);
printf("\n");
for(i = 0; i < 10; i ++)
printf("%d ",b[i]);
printf("\n");
memcpy(b,a,sizeof(int)*5);//全复制
sort(a,a + 10,comp);//从大到小排列
for(i = 0; i < 10; i ++)
printf("%d ",a[i]);
printf("\n");
memcpy(b,a,sizeof(int)*10);
for(i = 0; i < 10; i ++)
printf("%d ",b[i]);
printf("\n");
char c[5],d[5];
memset(&c,'*',sizeof(c));//memset函数初始化c[5]为*
memcpy(d,c,sizeof(char)*5);//字符串的复制
for(i = 0; i < 5; i ++)
printf("%c ",c[i]);
printf("\n");
for(i = 0; i < 5; i ++)
printf("%c ",d[i]);
printf("\n");
return 0;
}
p39页开灯问题让我发现int,float,double类型不可以用memset初始化除0之外的数字。
#include<stdio.h>
//#include<memory.h>
int main()
{
int a[8];
int n,k,i,c;
while(scanf("%d%d",&n,&k) != EOF)
{
int t;
for(i = 1; i <= n; i ++)
a[i] = 1;
for( t = 2; t <= k; t ++)
{
c = 1;
for( i = t; i < n ; i = c*t)
{
if(a[i] == 1)a[i] = 0;
else a[i] = 1;
c++;
}
}
for(i = 1; i <= n; i ++)
if(a[i] == 1)
printf("%d ",i);
}
return 0;
}