c ++ memset()在main函数中的工作方式不同

时间:2015-08-20 03:45:53

标签: c++ c

我遇到了memset函数的问题 这是代码的一部分 代码1

int main()
{
    long long int num=600851475143;
    bool factor[5000];
    //memset(factor,true,sizeof(factor));
    primer_factor_find(factor);
    int largest=largest_primer_factor(num,factor);
    cout<<largest<<endl;  
    return 0;
}

void primer_factor_find(bool factor[])
{
    memset(factor,true,sizeof(factor));
    int j,k;
    for(j=1;j<=2500;j++)
        for(k=3*j+1;k<=5000;k+=(2*j+1))
            factor[k]=false;
}

Code2之间的唯一区别是memset函数的位置。(在Code2中,memset是主要的) 我发现Code1根本不起作用.Code2工作正常。怎么回事?

3 个答案:

答案 0 :(得分:2)

void primer_factor_find(bool factor[])
{
    memset(factor,true,sizeof(factor));

将无界数组传递给函数基本上等于指针。此时,sizeof为您提供指针大小,并将大部分内容留下垃圾。

虽然你把它放到main,但编译器知道完整的大小。

答案 1 :(得分:1)

在函数签名中,数组将转换为指针bool *,因此sizeof factor将返回sizeof(bool *)

答案 2 :(得分:1)

factor衰减到指针void primer_factor_find(bool factor[])

当数组传递给函数时,它会衰减为指针。