在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

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

#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