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你认为它可能是什么?只是想澄清一下:家庭作业问题是可以的。但是你还没有展示你尝试过的东西,“解释这堵代码墙”的问题不适合这个网站。