[英]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
的变量重命名为pa
, pb
和pc
。 因此,您在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
。
因此, a
, b
, c
是事物的指针,而a
, b
, c
是“事物”。 当您将func
的变量重命名为其他名称时,变得更容易,例如: pa
, pb
和pc
为“ 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.