c++ memset()在main函数内外的工作方式不同
c++ memset() works different in/out of the main function
我遇到了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[])
数组在传递给函数时衰变成指针。
相关文章:
- 在 Eclipse 中添加库的工作方式是否与在 Visual Studio 中相同?
- OpenGL应用程序在不同的计算机上的工作方式不同
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- wait_until在主线程而不是主线程中的工作方式不同吗? c ++
- 用于了解输入和输出流缓冲区实际工作方式的程序
- 查找函数在unordered_map中的工作方式是搜索键值
- 异步操作的 Asio 处理程序在其同步对应项正常工作时不会调用
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- 容器类别在STL中的工作方式
- Unity 的 HLSL/Cg 预处理器工作方式错误?
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- 不了解C 集合的工作方式
- 有人可以解释C 操作员=此处的工作方式
- 了解 declval 在copy_assignment情况下的工作方式
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 了解文件页在技术级别的工作方式
- 战俘的工作方式不同,详细解释
- 切换到新编译器后,SSCANF 的工作方式有所不同
- 我不明白放置新的工作方式以及如何释放内存
- 重载输入/输出运算符,为什么它以这种方式工作而不是以另一种方式工作