memcpy(b,a,sizeof(int )*k)函数

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;
}

你可能感兴趣的:(函数,sizeof)