找出什么是正确的解决方案。指针

时间:2015-12-01 20:46:28

标签: c

使用*p1之后procd3的可访问值是什么?

void procd3(int *pt1, int *pt2){
    int *pt3;
    pt3 = pt1;
    pt1 = pt2;
    *pt1= *pt3 + 1;
}

    void main(){
    int va;
    int *p1, *p2;
    …
    p1=(int *)malloc(sizeof(int));
    p2=(int *)malloc(sizeof(int));
    *p1=3;
    …
    *p2= *p1 + 2;
    …
    procd3(p1,p2);
    …
}

我认为答案是4.因为*p1=3一开始就是*p2=*p1+2=5。因此,当函数被调用pt3=3,然后调用pt1=5,最后调用*pt1=3+1=4

1 个答案:

答案 0 :(得分:1)

为了便于说明,我们假设malloc0x10000x1004返回p1p2。因此,当您致电procd3时,pt1最初为0x1000pt2最初为0x1004

首先发生的事情是您将pt1的值分配给pt3,然后将pt2的值分配给pt1,为我们提供以下内容:< / p>

pt3 == 0x1000 == p1
pt1 == 0x1004 == p2

*pt3 == *p1 == 3

现在,您进行作业

*pt1 = *pt3 + 1;

但请记住,pt1指向与p2 - 0x1004相同的位置。 p1指向的内存不受影响。因此,在函数调用之后,*p1仍为3