C memset(ary,0,length)是在双数组中输入零的一种便携式方法吗
可能重复:C memset(ary,0,length)是在双数组中输入零的一种便携式方法吗,c,floating-point,double,ieee-754,memset,C,Floating Point,Double,Ieee 754,Memset,可能重复: 下面的代码使用memset将所有位设置为零 int length = 5; double *array = (double *) malloc(sizeof(double)*length); memset(array,0,sizeof(double)*length); for(int i=0;i<length;i++) if(array[i]!=0.0) fprintf(stderr,"not zero in: %d",i); int-length=5; dou
下面的代码使用memset将所有位设置为零
int length = 5;
double *array = (double *) malloc(sizeof(double)*length);
memset(array,0,sizeof(double)*length);
for(int i=0;i<length;i++)
if(array[i]!=0.0)
fprintf(stderr,"not zero in: %d",i);
int-length=5;
double*数组=(double*)malloc(sizeof(double)*长度);
memset(数组,0,大小f(双)*长度);
对于(int i=0;i使用::std::fill(数组,数组+长度,0.0);
它不可移植。只需使用循环即可。
您不需要强制转换malloc返回值。如果您在C99环境中,则无法得到任何保证。浮点数的表示形式在§5.2.4.2.2中有定义,但这只是逻辑和数学表示形式。该部分甚至没有提到浮点数是如何以字节形式存储的。相反,它在脚注中说:
浮点模型旨在阐明每个浮点特性的描述,不要求实现的浮点算法相同。
此外,§6.2.6.1规定:
除本款规定外,所有类型的表示均未指定。
在该子条款的其余部分中,没有提到浮点类型
总之,不能保证0.0
表示为所有位为零。Dupe AFAIK,从技术上讲,0.0
不需要用所有位为零的位模式表示。遵循这个方法,如果它在平台上以这种方式工作,我希望std::fill()
的实现调用std::memset()< C++ >内部代码。@马修,你认为这有什么区别?<代码>新< /代码>不是C.的一部分,你需要使用Maloc或CaloC或者将标签改回C++。原因是JeremeyP是的,抱歉。FILIN()只在容器不提供随机访问时才有用。