C ++比较两个整数值,一个简单指针和一个指针

时间:2015-09-02 09:26:52

标签: c++ c++11

我在c ++中有以下功能:

bool compareThem(int top_limit, int* maximum)
{
       if( top_limit >= maximum )
       {
            cout << "Error, maximum number shown be greater than top_limit.";
       }
}

我希望在integerinteger pointer之间进行简单比较,但逻辑上C ++无法做到这一点,因为使用==运算符,intint*不是同一类型。我该如何解决呢?

3 个答案:

答案 0 :(得分:7)

只需取消引用maximum

if (top_limit >= *maximum)
//               ^

这会将int top_limitint指向的内存位置存储的maximum进行比较。

这是C ++的基础知识之一,应该在您的介绍性书中介绍。

答案 1 :(得分:3)

此代码的作用

bool compareThem(int top_limit, int* maximum)
{
       if( top_limit >= maximum )

top_limit整数值与maximum指针变量内的地址进行比较。要获取指针所指向的变量的值,必须取消引用指针变量,这可以使用* operator:*maximum完成。

答案 2 :(得分:1)

在C / C ++中,您可以使用*&运算符来访问地址(指针)指向的值,并获取值的内存中的地址。在您的示例中,您尝试将整数与指针进行比较,我可以通过以下几种方式考虑您可能会这样做(取决于所需的行为):

将整数与指针

指向的值进行比较

为了比较两个对象的值,您需要检索指针指向的地址的值。要执行此操作,您需要使用取消引用运算符来检索您可以将其视为整数的值,请考虑以下内容。

bool myFunction(int a, int* pointer_to_b)
{
  int b = *pointer_to_b;
  return a > b;
  // Or the one line: return a > *pointer_to_b;
}

将指针的地址与整数

进行比较

由于地址只是整数,因此可以将整数与存储在指针中的地址进行比较,但除非确实需要,否则应避免执行此类操作。考虑:

bool myBadFunction(int a, int* b)
{
  return (int*) a > b;
}

将整数的地址与存储在指针

中的地址进行比较

我很少遇到整数与整数地址的比较,但我偶尔会遇到将代码与特定地址进行比较的代码(但通常有替代方案而且我不会推荐它)。有关如何实现此目的,请参阅以下内容。

bool myAlmostUselessFunction(int a, int* b)
{
  int *address_of_a = &a;     //< take the address of a
  return address_of_a > b;
}