使用示例代码理解C语言中的指针

问题描述 投票:0回答:1

我正在学习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;
}
c pointers
1个回答
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。

© www.soinside.com 2019 - 2024. All rights reserved.