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

c++ memset() works different in/out of the main function

本文关键字:工作 方式不 函数 memset main c++      更新时间:2023-10-16

我遇到了memset函数的问题下面是部分代码Code1

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在main中)我发现Code1根本不起作用。Code2工作得很好。怎么了?
void primer_factor_find(bool factor[])
{
    memset(factor,true,sizeof(factor));

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

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

factor在这里衰减为指针void primer_factor_find(bool factor[])

数组在传递给函数时衰变成指针。