【问题标题】:How to appropriately use pointers in C++ functions?如何在 C++ 函数中正确使用指针?
【发布时间】:2019-11-10 13:37:27
【问题描述】:

我正在尝试掌握 C++ 中的指针和地址的窍门,但在使用更改参数的函数时遇到了问题。

下面的代码是在无限循环中写入Loop run #1.,而不是递增值foo

我的问题是:这里的代码有什么问题?

#include <iostream>

void Statement(int *foo) {
    std::cout << "Loop run #" << *foo << ". ";
    foo++;
}

int main() {

    int foo = 1;

    for (;;) {
        Statement(&foo);
    }

}

【问题讨论】:

  • 代码在做什么?它应该做什么?
  • 你的意思是在函数内部写(*foo)++;
  • 你正在递增一个指针的副本,而不是指向的整数
  • c++ 中,最好通过引用而不是像编写c 代码那样通过指针传递。
  • @maxxy 关于您发布的问题。 “这里的代码有什么问题?” 没有明确说明您遇到的问题。始终清楚地解释您对所看到的(也明确指定的)输入和输出的期望。换句话说,发帖minimal reproducible example,这是此处广受好评的问题的最低要求。

标签: c++ loops for-loop pointers pre-increment


【解决方案1】:

您正在递增指针本身的副本,而不是它指向的内容。您可能的意思是:

(*foo)++;

这仍然无法修复无限循环,因为你没有什么可以阻止它。

【讨论】:

    【解决方案2】:

    您的问题是您正在递增指针,而不是指向的数据。

    替换

    foo++
    

    (*foo)++
    

    增加指向的值。

    【讨论】:

      【解决方案3】:

      如果我正确理解了您要执行的操作,则应按照以下方式声明该函数,如演示程序中所示

      #include <iostream>
      
      void Statement(int *foo) {
          std::cout << "Loop run #" << *foo << ". ";
          ++*foo;
      }
      
      int main() {
      
          int foo = 1;
      
          for (; ; ) {
              Statement(&foo);
          }
      }
      

      这是在一个无限循环中,您试图输出foo 的递增值。

      在这种情况下,您已经增加了指针所指向的值本身,例如

      ++*foo
      

      如果您想限制循环迭代,那么您可以使用例如 unsigned char 类型的对象并按以下方式定义循环

      #include <iostream>
      
      void Statement( unsigned char *foo) {
          std::cout << "Loop run #" << int( *foo ) << ". ";
          ++*foo;
      }
      
      int main() {
      
          unsigned char foo = 1;
      
          for (; foo ; ) {
              Statement(&foo);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-22
        • 2018-09-12
        • 1970-01-01
        • 2015-10-23
        • 1970-01-01
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        相关资源
        最近更新 更多