【问题标题】:Confusion about Pointers C++关于指针 C++ 的困惑
【发布时间】:2014-08-26 15:38:34
【问题描述】:

任务:我想交换指针而不引用传递函数中的指针。

问题 1:以下代码完成了这项工作,但我认为它交换“数据”而不是交换“指针”。

void swappointers(char *ptrX, char *ptrY)
{
   char dummy;
   dummy = *ptrX;
   *ptrX = *ptrY;    //LINE
   *ptrY = dummy;
}

问题 2:注释行是如何工作的? *ptrX 表示 ptrX 正在被取消引用(访问指针指向的值)。 *ptrY 的情况类似。但是为什么 ptrX 指向的值在这里被改变了呢?我的意思是它实际上看起来像这样:

ValueofX = ValueofY

谢谢你:)

编辑:

解决了第一个问题。

void swappointers(char **ptrX, char **ptrY)
{
   char *dummy = nullptr;
   dummy = *ptrX;
   *ptrX = *ptrY;
   *ptrY = dummy;
}

【问题讨论】:

  • 对于问题#1,试试std::swap 然后你就不必担心所有这些了。指向指针而不是对指针的引用只会使使用 swappointers 笨拙。

标签: c++


【解决方案1】:

我认为它交换“数据”而不是交换“指针”。

你是对的。

我想交换指针而不引用传递函数中的指针。

那是不可能的。除非您通过引用传递,否则调用者将看不到函数内部所做的更改。

【讨论】:

  • 我不认为问题 1 是不可能的。在函数中传递 **ptrX 和 **ptrY 怎么样?我得到了一些暗示。谢谢你:)
  • @Asad:这通常属于“通过引用传递”的类别(在 C 中,这是通过引用传递的唯一方法,在 C++ 中,您可以选择使用指针或引用)
  • 谢谢你告诉我,本。
【解决方案2】:
  1. template<typename T>
    void swap(T &a, T &b){
        T backup=a;
        a=b;
        b=backup;
    }
    
  2. *ptrX = *ptrY; 表示变量,指向ptrX,必须与指向ptrY 的变量具有相同的值。

【讨论】:

  • 您解决了第二个问题。谢谢。我不知道那个“汽车”。而且,我不能用那个。
【解决方案3】:

关于您的评论行:

*ptrX = *ptrY;    //LINE

简单的英语意思是:

将ptrY指向的内存位置的值放入ptrX指向的内存位置。

【讨论】:

    猜你喜欢
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 2023-04-01
    • 2021-06-23
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多