C++中指针与int类型的比较

pointer comparision with int type in c++

我执行了以下程序:./aout w

#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
    if (argv[1] == "w")
    {
        cout << "this was worked";
    }
    else
    {
        cout << "this did not worked";
    }
}

输出:this did not worked.
我尝试执行:if(&argv[1] == "w") if(argv[1]=='w')

如果使用相等运算符比较数组和指针,则比较的是它们是同一个数组还是指向同一个对象。您不是在比较数组或指向元素的内容。由于 argv[1] 指向与字符串文字不同的数组,因此无论内容如何,​​它们都比较不相等。

tried executing: if(&argv[1] == "w")

现在,您正在将 char**const char* 进行比较(在数组衰减之后)。比较不相关类型的指针没有多大意义。

if(argv[1]=='w').

现在,您正在比较 char*char。比较指向 char 的指针没有多大意义。


要比较两个字符串的内容,一个好的解决方案是使用字符串视图作为其中一个或两个操作数。这是一个小改动:

 using namespace std::literals;
 if (argv[1] == "w"sv)

if (argv[1] == "w")

相当于

char const* p1 = argv[1];
char const* p2 = "w";
if ( p1 == p2 )

即您正在比较两个指针,而不是指针指向的字符串。

您可以使用 std::strcmp。但是,由于您使用的是 C++,您还不如使用 std::string.

if (std::string(argv[1]) == "w")

如果你能使用 C++17,你也可以使用 std::string_view

if (std::string_view(argv[1]) == "w")