在c ++中指针大于零,意味着什么?

时间:2012-03-09 16:31:39

标签: c++

我在c ++中遇到了问题。我读了一些代码,但有一个非常有线的指针用法。代码如下:

   double* marginalProbability =
   new double [10 * sizeof(marginalProbability[0])];
   memset( marginalProbability, 0, 10 * sizeof(double) );
    //................
            //.................
   if(marginalProbability>0)
        printf("larger");
   else
        printf("smaller");

我问的问题是if(marginalProbability>0)是什么意思。它是一个大于零的指针。我认为在普通编译器中,没有地址等于零。或者还有其他含义吗?否则,这条线似乎毫无意义。感谢。

5 个答案:

答案 0 :(得分:5)

我认为这是一个错误,原作者的意思是:

if(marginalProbability[0]>0)
        printf("larger");
   else
        printf("smaller");

我不明白为什么如果marginalProbability已经无条件地调用memset(),他们会测试{{1}}是否有效。另外,使用单词 greater less 表示值的比较,而不是指针。

答案 1 :(得分:4)

NULL指针被视为零。话虽这么说,这段代码可能是错的,因为比较保证是真的(因为如果指针为NULL,memset会崩溃)。

答案 2 :(得分:2)

在这种情况下,0被解释为空指针常量。

你可以比较两个指针,但结果是未指定的,除非它们指向同一个数组的两个元素;所以代码形式良好但没有意义。

我怀疑代码应该将概率值*marginalProbabilitymarginalProbability[i]与零进行比较。如果它打算检查分配是否成功,那么出于三个原因它是错误的:

  • 必须使用!=,因为>的结果未指定;
  • 必须在memset()之前完成;
  • 只有在分配使用new (std::nothrow)时才有必要;普通new在失败时抛出std::bad_alloc

答案 3 :(得分:0)

有一些指针0。它们明确地是指向没有当前有效对象的“空”指针。但是,在这种情况下使用< / >是没有意义的 - 例如,没有1指针这样的东西。

此外,那个C代码假装是C ++。

答案 4 :(得分:0)

值为零的指针是空指针。什么都没有的指针。检查它不为零(p!= 0更常见,p> 0,尽管p!= nullptr最正确)意味着它不为空。

您列出的代码也是错误的。如果新操作失败,它将不会返回空指针,而是抛出一个不会被捕获的异常。

这应该是它。

try{
    std::vector<double> marginalProbability (10, 0.0);
}catch(const std::bad_alloc& e){
    std::cerr << "no memory" << std::endl;
}