如何在 C++ 函数中正确使用指针?

How to appropriately use pointers in C++ functions?

我正在尝试掌握 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);
    }

}

您的问题是您增加了指针,而不是 pointed-to 数据。

替换

foo++

(*foo)++

增加 pointed-to 值。

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

(*foo)++;

虽然这仍然无法解决无限循环,因为您没有什么可以阻止它的。

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

#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);
    }
}