将指针分配给字符串对象的第一个也是最后一个索引

Assigning Pointers to the first and last indexes of an String Object

本文关键字:第一个 最后一个 索引 对象 指针 分配 字符串      更新时间:2023-10-16

我正在尝试编写一个函数,该功能将用户提交字符串并创建两个指针;一个指向字符串的第一个索引,一个指向字符串的最后一个索引。当我尝试将指针设置为等于特定索引firstPointer = userString[0]; secondPointer = userString[userString.length() - 1];时,我会遇到错误。我收到的错误出现在=操作员上,并说"类型CHAR的值不能分配给类型CHAR的实体"。

我已经阅读了stackoverflow上的其他几篇文章,我认为他们没有解决同一问题,或者是合理的,我不明白他们的建议。我是C 的新手,对指针的新手是新手。当我意识到指针的分配是错误的时,您可以忽略我只是设置该循环。请在下面找到功能代码:

功能

void ReverseString(string &userString)
{
    char *firstPointer;
    char *secondPointer;
    firstPointer = new char;
    secondPointer = new char;
    firstPointer = userString[0];
    secondPointer = userString[userString.length() - 1];
    //Iterate over entire string
    for (int loopCounter = 0; loopCounter < userString.length()/2; loopCounter++)
    {
    }
}

我收到的错误出现在=操作员上,并说
"类型char的值不能分配给类型char的实体"。

我不相信你。我准备打赌它实际上说的很大一笔:
"类型char的值不能分配给类型char *的实体"

trailling *至关重要。firstPointer不是char,它是"指向char"的指针,或者正如我们在此处倾向于说的" char*"。

另一方面,

userString[0] a char(或更确切地说,是对 char的引用)。它是索引0的字符串中字符的引用。如果您想要指向该char的指针,则需要进行地址。所以&userString[0]。因此您的代码可能是:

    firstPointer = &userString[0];
    secondPointer = &userString[userString.length() - 1];

或者,获得第一个和最后一个元素是如此普遍,以至于有特定的功能,因此您可以写下:

    firstPointer = &userString.front();
    secondPointer = &userString.back();

最后,的所有实际上取决于是第一个和最后一个字符 - 因此您应该真正以:

开始
    if (userString.empty()) return;

确保有。

尝试以下:

void ReverseString(string &userString)
{
    char *firstPointer;
    char *secondPointer;
    firstPointer = &userString[0];
    secondPointer = &userString[userString.length() - 1];
    .....
}

您的问题是您的用户引用不是指针。指针就像实际对象的地址一样。因此,这样做:firstPointer = userString[0];就像当某人要求您的地址时给您房子。但是您可以使用&操作员来获得"地址",例如firstPointer = &userString[0];

在这种情况下,您也不需要使用new。如果您想指出直到那一点不存在的东西,您会写出类似firstPointer = new char;的东西,有效地创建了一个新的char并指向它。但是,由于userString已经存在,因此无需创建一个新的。

相关文章: