繁体   English   中英

C ++中的指针混淆

[英]Confusion on pointers in C++

我正在与指针练习,并碰到了这个东西。
以下代码给出了答案:

 1
 0
 3

当我用* c改变* a时,答案是相同的,但是当用* b = 0改变时,答案是

1
2
0

您能请问这些过程中每个幕后发生的事情吗?

#include<iostream>
using namespace std;
void func(int *a, int *b,int *c)
{
    a=b;
    b=c;
    c=a;
    *a=0;

}


int main()
{
    int a=1,b=2,c=3;
    func(&a,&b,&c);
    cout<<a<<endl<<b<<endl<<c;

}
a = 1
b = 2
c = 3

为了便于阅读,我将func的变量重命名为papbpc 因此,您在func混合使用的内容会导致:

  • pa指向pb指向的内容( b
  • pb指向pc指向的内容( c
  • pc指向pa指向的内容(现在是b

因此

*pa = 0

跟随pa的指针(到b )并将其设置为0,从而为您提供:

a = 1
b = 0
c = 3

然而

*pb = 0

而是跟随pb的指针(指向c )并将其设置为0,从而为您提供:

a = 1
b = 2
c = 0

您首先要交换指针; 唯一相关的行是:

a=b;

因此, func的变量a现在指向您的main中b的地址。

然后

*a=0;

func中指向的变量a的值(现在是main中的b )设置为0

因此, abc是事物的指针,而abc是“事物”。 当您将func的变量重命名为其他名称时,变得更容易,例如: papbpc为“ pointer-to-a”。 然后您可以看到正在交换指针,并且*pa=0表示“将值pa指向0

牢记这一点,应该很清楚,修改代码将以不同的方式交换指针,从而导致不同的结果。

当我用* c更改* a时,答案是相同的

为什么会有什么不同? 您写了c=a; 就在它上面。

随* b = 0改变,答案是1 2 0

确实,您写了b=c; 在此之前,因此在*b写入0将使第三个参数的内容归零。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM