使用*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
。
答案 0 :(得分:1)
为了便于说明,我们假设malloc
为0x1000
和0x1004
返回p1
和p2
。因此,当您致电procd3
时,pt1
最初为0x1000
,pt2
最初为0x1004
。
首先发生的事情是您将pt1
的值分配给pt3
,然后将pt2
的值分配给pt1
,为我们提供以下内容:< / p>
pt3 == 0x1000 == p1
pt1 == 0x1004 == p2
*pt3 == *p1 == 3
现在,您进行作业
*pt1 = *pt3 + 1;
但请记住,pt1
指向与p2
- 0x1004
相同的位置。 p1
指向的内存不受影响。因此,在函数调用之后,*p1
仍为3
。