用C+解释指针传递+;? 我有一个C++函数,其中有两个 int >代码>,它的目的是充当计数器,这些计数器被声明在我的主代码中的函数之外。我的目标是用函数执行的结果更新计数器变量

用C+解释指针传递+;? 我有一个C++函数,其中有两个 int >代码>,它的目的是充当计数器,这些计数器被声明在我的主代码中的函数之外。我的目标是用函数执行的结果更新计数器变量,c++,pointers,C++,Pointers,我已经申报了 int cor_letters = 0; int cor_place = 0; 然后像这样调用我的函数 res = compare(input, secret_word, &cor_letters, &cor_place); 我的compare函数标题是: bool compare(string user_input, string secret, int * correct_letters, int * correct_place) 在我的compareco

我已经申报了

int cor_letters = 0;
int cor_place = 0;
然后像这样调用我的函数

res = compare(input, secret_word, &cor_letters, &cor_place);
我的
compare
函数标题是:

bool compare(string user_input, string secret, int * correct_letters, int * correct_place)
在我的
compare
code中,当我得到计数器的最终值时,我会更新它们,如下所示:

correct_letters = &cor_l;
correct_place = &cor_p;
在仔细阅读了编译器错误之后,我找到了这个解决方案,这似乎是可行的。然而,我不太明白为什么会这样。在开始时,我获取两个变量的地址并将它们传递到函数中。但是这个函数有两个指针。因此指针指向传入变量的地址

到目前为止,我似乎明白发生了什么。但我对最后的赋值感到困惑——指针(注意它们是函数头中的变量名)随后被更新到我正在使用的临时内部函数变量的地址。为什么这让我得到了价值观


我更多的是一个视觉学习者,仅仅通过阅读一些文本很难掌握指针,所以如果你不介意制作一些快速的文本图表来表示正在发生的事情,那就太好了。谢谢你

我想你最后

correct_letters = &cor_l;
correct_place = &cor_p;
以使编译器停止抱怨。
你关于取局部变量地址的分析是正确的

你可能想这么做

*correct_letters = cor_l;
*correct_place = cor_p;
为了给变量分配正确的值 这些都在功能之外

关于引用(
&
)和取消引用(
*
)操作的简短备忘录

TYPE var_a=..., var_b=...; // some variables of a chosen type
TYPE *ptr=NULL;    // a pointer on such a type, but not referencing anything yet

ptr=&var_a; // now ptr memorises the address of var_a (reference operation)

var_b=*ptr; // access the value which is stored at the address memorised
            // by ptr (dereference operation) in order to read it
            // (here, this has the same effect as   var_b=var_a;   )

*ptr=var_a+var_b; // access the value which is stored at the address memorised
                  // by ptr (dereference operation) in order to alter it
                  // (here, this has the same effect as   var_a=var_a+var_b;   )

指针和引用是C++中的不同事物。由于您只讨论了问题正文中的指针,因此我也对您的问题标题进行了编辑。如果我误解了你的意图,请重新编辑。请不要描述代码,只显示小片段。相反,试着创造一个新的世界来展示给我们看。如果您得到构建错误,那么请确保您展示的示例复制了错误,并在您得到错误的行上添加注释。当然,还包括您得到的实际错误,完整地粘贴副本。另外,请花一些时间刷新,以及。虽然编译器可能已经停止抱怨,但您在此处显示的解决方案不太可能真正达到您期望的效果,但如果没有它,则很难确定。通常在C++中,编译器不抱怨甚至不意味着程序没有明确的错误(例如)。未在函数外部更新值。请参阅下面我接受的回答。也可能有助于添加一个简短的解释,即
'*'
正在作为解引用运算符访问地址处的对象,而不是地址本身。还可以通过指向数组的指针帮助解释
[…]
也可以作为解引用。(你的回答很好,这些只是改进的想法,而不是批评)好吧,这最终解决了它,结果是值没有在函数之外更新。还有@DavidC.Rankin,这很有道理。由于
correct\u letters
是一个包含地址的指针,通过执行
*correct\u letters
,我们将其取消引用,并表示此地址的对象从
cor\u l
等处获取值。@DavidC.Rankin感谢您的建议。我试图说明引用/取消引用操作。我没有花时间解释数组;我认为问题更多的是访问调用上下文,而不是使用数组。一本书肯定会更好地解释所有这些;^)