我在c ++中有以下功能:
bool compareThem(int top_limit, int* maximum)
{
if( top_limit >= maximum )
{
cout << "Error, maximum number shown be greater than top_limit.";
}
}
我希望在integer
和integer pointer
之间进行简单比较,但逻辑上C ++无法做到这一点,因为使用==
运算符,int
和int*
不是同一类型。我该如何解决呢?
答案 0 :(得分:7)
只需取消引用maximum
:
if (top_limit >= *maximum)
// ^
这会将int
top_limit
与int
指向的内存位置存储的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;
}