首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++指针练习

C++指针练习
EN

Stack Overflow用户
提问于 2014-03-31 12:39:28
回答 2查看 2.8K关注 0票数 1

我在网上找到了以下关于C++指针的完整练习,但我仍然无法理解它是如何工作的。

代码语言:javascript
复制
#include <iostream>
#include <cstring>

using namespace std;

void reverse(char *s, int n) {
    char *first = &s[0];
    char *last = &s[n-1];
    int k = 0;

    while(first < last){
        char temp = *first;

        *first++ = *last;
        *last-- = temp;

        k++;
    }
}


int main() {
    int n;
    char str[] = "Hello";
    cout << str << endl << endl;
    n = strlen(str);
    reverse(str,n);
    cout << str << endl;
    return 0;
}

我真的不明白的是

代码语言:javascript
复制
*first++ = *last;
*last-- = temp;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-31 12:45:04

指针基本上是内存中的地址,在这种特殊情况下,指针指向内存中的地址,您可以在其中找到字符。*first是在地址处的值(即:字符),使用++--,您可以增加或减少指针,从而遍历内存,指向下一个/前一个字符。

*first++ = *last;被评价为:

  1. 输入first指向的内存地址/位置,该值位于last点所在的内存位置
  2. 增量first,以便它指向下一个地址。

这相当于:

代码语言:javascript
复制
*first = *last;
first ++;

*last-- = temp;被评价为:

  1. 输入last指向temp值的内存地址/位置
  2. 减少last,使其指向前一个地址

我留给你们一个练习,看看哪两个操作是等价的:)

票数 2
EN

Stack Overflow用户

发布于 2014-03-31 12:45:09

代码语言:javascript
复制
*first = *last; // copy data from last to first
++first; // point to the next item
*last = temp; // copy data from temp to last
--last; // point to the previous item
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22761766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档