#include <stdio.h> int func(int x,int *p); void main( ) { int a=1,b=2,c; c=func(a,&b); 怎么解?

#include <stdio.h>
int func(int x,int *p);
void main( )
{ int a=1,b=2,c;
c=func(a,&b);
b=func(c,&b);
a=func(b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
int func(int x,int *p)
{
x++;
*p=x+2;
return(*p+x);
}
求讲解
最新回答
梦明

2024-12-01 12:05:52

func作用是将传入的第二个参数改为x+2+1=x+3,并返回2x+2+2=2x+4,所以
int a=1,b=2,c;
c=func(a,&b); //这句执行后b=a+3=4 c=2*a+4=6
b=func(c,&b);//同上,b=2*6+4=16

a=func(b,&c);// c=16+3=19 a=2*16+4=36
即abc分别为36 16 19
追问
为什么是返回2x+2+2
追答
你看下int func(int x,int *p)
{
x++; //x=x+1
*p=x+2; //=x+1+2
return(*p+x); //=x+1+2+x+1=2x+4
}
追问
c=func(a,&b);//a=a++=2,b=a+2=4,c=6
b=func(c,&b);//c=c++=7,b=7+2+7=16,b=16
a=func(b,&c);//b=b++=17,c=17+2=19,a=17+19=36
a=36,b=17,c=19
您看看哪里有问题
追答
c=func(a,&b);//a=a++=2,b=a+2=4,c=6
注意这里的func的第一个参数是a,是普通的传递,在func里对a的操作是不会影响到外面的a的,所以a无论是多少,执行func后都不会变化,所以这一行执行完后,a还是1,可以走下流程
c=func(a,&b)第一次执行
int func(int x,int *p) 此时传入的a=1

{
x++; //x=2
*p=x+2; //*p=2+2=4
return(*p+x); //return 4+2=6
}
即此时abc为1、4、6
追问
🙏
别离我

2024-12-01 00:42:22

重点在给函数传值和传地址(指针)的区别。
具体到int func(int x,int *p)中,如用c=func(a,&b)来调用,就是把a的值赋予x(x是函数内部自定义的,两者的地址不一样),再把b的地址赋予p(两者地址完全一样)。函数执行中,对x的操作不影响a的值,而p和b是同一个地址,对*p的操作则就是对b的操作,虽然函数执行完毕后x和p就自动释放了,而p的影响就直接反映到b了,结果就是func(a,&b)调用结束后,a的值不变,b的值变了。
浪痞孤王

2024-12-01 08:27:11

func就是个带参数的函数,x,*p就是形参,*p就是个整型变量,p是指针变量。 func(int x,int *p)可以看作 func(int x,int b) 。 *p=b 或p=&b,b是个整型变量。
追问
c=func(a,&b);//a=a++=2,b=a+2=4,c=6
b=func(c,&b);//c=c++=7,b=7+2+7=16,b=16
a=func(b,&c);//b=b++=17,c=17+2=19,a=17+19=36
a=36,b=17,c=19
菇凉我万分华丽

2024-12-01 06:23:00

这个是参数传值的+指针值变更的知识。找书看看吧,别人讲也不理解。
一清北华

2024-12-01 06:11:52

这个可以搜一下的吧,应该可以找到