C 找出正确的解决方案。指针

C 找出正确的解决方案。指针,c,C,使用procd3后,*p1的可访问值是多少 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)); *

使用
procd3
后,
*p1
的可访问值是多少

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
为了便于说明,让我们假设
malloc
p1
p2
返回
0x1000
0x1004
。因此,当您调用
procd3
时,
pt1
最初是
0x1000
pt2
最初是
0x1004

首先,将
pt1
的值分配给
pt3
,然后将
pt2
的值分配给
pt1
,给出以下信息:

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

*pt3 == *p1 == 3
现在,你做作业

*pt1 = *pt3 + 1;

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

听起来像是家庭作业。你自己解决过吗?嘘,或者干脆自己运行看看?@Louis你可以
printf
来测试它,你知道..@BlueMoon当我在做
pt3=pt1
这是什么意思?@Louis你认为它可能是什么?只是想澄清一下:家庭作业问题是可以的。但是你还没有展示你尝试过的东西,“解释这堵代码墙”的问题不适合这个网站。