我正在学习C语言的指针,所以我在看一个例子。我试着加了注释来理解是怎么回事。下面的代码是否正确?换句话说,我的注释描述的操作是否正确?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(){
int x, y;
int *p1, *p2;
x=-42;
y=163;
p1=&x; //pointer 1 points to the address of x
p2=&y; //pointer 2 points to the address of y
*p1=17; //this just made x=17 because it says that the value at the address where p1 points should be 17
p1=p2; //this just made pointer 1 point at the same place as pointer 2, which means that p1 now points at y
p2=&x; //this just made pointer 2 point at the address of x
//NOW WE HAVE: p1 points at y, p2 points at x, y=17 because of p1
*p1=*p2; //now x=17 as well as y (because the value at the place p2 points, which is x, just became 17)
printf("x=%d, \ny=%d\n", x, y);
return 0;
}
"检查调试器",肯定是这样的。 你也可以在每次设值检查后复制你的printf语句就可以了,因为你刚学,但这不是好的长期做法。
我不知道你是否已经完全理解了这个概念,只是把x和y混在一起犯了一个错,或者你做了一个不正确的假设,但是是的,在你的评论中。
/现在我们有: p1指向y,p2指向x,y=17,因为p1
你此时p1和p2的位置是正确的,但y没有收到赋值,因为你最初给它的值是163。 对*p1的赋值会影响y,但只有在p1=p2行之后才会影响y.在这个注释点上,x=17,因为*p1=17行了几行.y与最初的赋值没有变化。
*p1=*p2; /现在x=17以及y(因为p2指向的地方的值,也就是x,刚刚变成17)
y在这里变成了17,因为*p1(现在是y)被分配到*p2中的值,正如你所说,是x。