使用指针反转char数组

时间:2016-01-29 04:22:40

标签: c++ reverse

无法理解while中的情况,如果可能的话可视化,请。

int main() 
{

        char text[] = "hello";
        int nChars = sizeof(text)-1;

        char *pStart = text;
        char *pEnd = text + nChars - 1;

        //can't understand this part 
        while (pStart < pEnd)
        {
            char tmp = *pStart;
            *pStart = *pEnd;
            *pEnd = tmp;

            pStart++;
            pEnd--;
        }

        cout << text << endl;

        return 0;
}

2 个答案:

答案 0 :(得分:2)

这是一种简单的交换机制。在while循环中,您的代码交换值。见附图。

Inside the while loop swapping is happening

答案 1 :(得分:0)

您的代码很简单,可以在text中交换字符。这里发生的是: -

  1. 您创建一个大小为6的字符数组text,存储“hello \ 0”。

  2. nChars已分配代表\0以外的文字中的字符数,因此此处为5(类似于strlen)。

  3. pStart指向文字的第一个字母(即“h”)而pEnd指向“o”(不是\0)。

    < / LI>
  4. 首先为tmp分配'h'。然后将pStart's字符替换为pEnd即'o'的字符。然后将pEnd's字符分配给存储在tmp中的字符。因此pStart&amp;中的字符pEnd被交换(但指针仍指向同一位置,请小心!)。

  5. pStart会增加&amp; pEnd递减(位置明智不是明智的,在这里再次小心!!)。所以现在pStart指向'e'&amp; pEnd到'l'。

  6. 程序重复!!!