我遇到了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工作正常。怎么回事?
答案 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[])
当数组传递给函数时,它会衰减为指针。