通过指针访问时NAN是否返回false?

Mor*_*sen 0 c++ pointers nan math.h

我正在编写一个返回指向数组数组的指针的函数.为了能够使用指针迭代数字,我将最后一个元素设置NAN为标记数组的结尾.
My Loop就像是

for(int* it=ptr;!isnan(*it);++it)  
//print *it
Run Code Online (Sandbox Code Playgroud)

但它一直持续到它崩溃所以我写了一些测试代码:

int* test = new int[1];  
*test = NAN;  
cout << isnan(NAN) << endl;  
cout << isnan(*test) << endl;
Run Code Online (Sandbox Code Playgroud)

结果是:

1
0
Run Code Online (Sandbox Code Playgroud)

我已经看到很多NAN在数组中用作"塞子"的例子.那为什么不起作用?

Jos*_*eld 5

您有未定义的行为,因为您尝试将NAN浮点类型转换为a,int并且该值不能由a表示int.

§4.9/ 1 [conf.fpint]浮点类型的prvalue可以转换为整数类型的prvalue.转换截断; 也就是说,丢弃小数部分.如果截断值无法在目标类型中表示,则行为未定义.

由于NAN它只是浮点数的一个特殊值,因此将它存储在一个中是没有意义的int.整数类型没有特殊的非数字值.您可以使用某个特定值来表示数组的结尾,但这不是一个特别令人愉快的解决方案.

如果您要像这样动态分配数组,则必须通过传递它来自己跟踪它的大小.对于其他数组(您实际上有一些表示数组对象本身的东西,而不仅仅是指向其元素的指针),您可以使用它std::end来查找它的结尾.但是,像往常一样,我建议使用标准容器.