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