gpt4 book ai didi

C++ 函数中的局部指针

转载 作者:行者123 更新时间:2023-11-28 01:05:45 44 4
gpt4 key购买 nike

这是我为学习 C++ 而创建的代码片段,我目前正在尝试自学。我的问题是:

为什么 *ptr = 30 会改变我的 main 中最后两个 cout 语句的输出值? (输出为 30、30、30)。因此,为什么 int y = 30;ptr = &y; 不更改我的 main 中的输出,并保留在函数的本地? (如果我注释掉*ptr = 30,而不是前两个语句,输出是30,5,5)

如果我将函数输入更改为 void printPointer(int *&fptr) -- 并注释掉 only *ptr = 30 --那么我的 main 中的 *ptr 将被修改,但不会修改 x。我理解这一点,因为通过引用传递正在修改指针,但不是我的第一条语句在我的 main 中修改 *ptr 和 x 的方式。

#include <iostream>

using namespace std;

void printPointer(int *fptr);

int main()
{
int x = 5;

int *ptr = &x;

printPointer(ptr);

cout << *ptr << endl;
cout << x << endl;

return 0;
}

void printPointer(int *fptr)
{

// int y = 30; // this does not change the output of the last two couts in main, output = 30, 5, 5
// fptr = &y;

*fptr = 30; // uncommenting this and commenting out the former two statements: output = 30, 30, 30

cout << *fptr << endl;
}

最佳答案

*ptr = 30 更改指向的内容 的值。在您的情况下,您已将 ptr 设置为指向 x (当您执行 ptr = &x 然后将其作为参数传递给 打印指针())。所以 x 的值被改变了。

当你改为执行 int y = 30; fptr = &y;,您所做的只是将 fptr 更改为指向一个不同 变量。就是这样。您没有更改所指向内容的值(即 x 的值)。而且您不会影响 ptr,因为 fptr 是一个单独的本地变量。所以ptr仍然指向xx仍然是5。

当您修改您的函数以通过引用获取指针时,然后将 fptr 更改为指向 y 更改 ptr,因为它们是同一个变量。

关于C++ 函数中的局部指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286446/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com