2004年属猴五行属什么:C语言问题

来源:百度文库 编辑:高考问答 时间:2024/04/19 23:45:30
#include <stdio.h>
int func(int a,int *p);

void main()
{
int a=1,b=2,c;

c=func(a,&b);
b=func(c,&a);
a=func(b,&c);

printf("a=%d,b=%d,c=%d",a,b,c);
}

int func(int a,int *p)
{
a++;
*p=a+2;
return(*p+a);
}
答案: 36 16 19
问题补充:怎么做的能详细解释下吗?

第一次调用func:参数传递使得a=1,*p=2;a++;-->a=2。*p=a+2;-->*p=2+2=4(由于指针操作,所以指针所指向的单元被修改b=4)。return(*p+a); -->return(6);-->c=6。

第二次调用func:参数传递使得a=6,*p=1;a++;-->a=7。*p=a+2;-->*p=7+2=9(由于指针操作,所以指针所指向的单元被修改a=9)。return(*p+a); -->return(16);-->b=16。

第三次调用func:参数传递使得a=16,*p=6;a++;-->a=17。*p=a+2;-->*p=16+2=19(由于指针操作,所以指针所指向的单元被修改c=19)。return(*p+a); -->return(36);-->a=36。
所以 36 16 19
注意 c=func(a,&b);第二个参数传递的是地址,所以 *p变化时,相应的主函数中的参数的值也变化。本程序a,b,c分别被修改两次,最后一次c=19,b=16,a=36。

#include <stdio.h>
int func(int a,int *p);

void main()
{
int a=1,b=2,c;

c=func(a,&b);
//调用函数后a=1(不变,传值调用), b=(a+1)+2=4, c=4+2=6
b=func(c,&a);
//c=6不变,a=(c+1)+2=9, b=9+7=16
a=func(b,&c);
//b=16不变,c=(b+1)+2=19,a=19+17=36

printf("a=%d,b=%d,c=%d",a,b,c);
}

int func(int a,int *p)
{
a++;
*p=a+2;
return(*p+a);
}

第一次func 的结果:
1+1 = 2
2+2 = 4 所以b = 4
返回结果:4+2 所以 C=6
a还等于1

第二次 func:
6+1 = 7
7+2 = 9 所以 A = 9
返回结果:7+9 = 16 所以 B = 16

第三次 func:
16+1 = 17
17+2 = 19 所以 C = 19
返回结果 17+19 = 36 所以 A = 36
好好看看指针那部分吧。
func(int x,int *p)的功能是:
将参数x的值加3再赋给地址参数p所指向的变量。
并返回x+1+x+3.

是关于函数调用参数的--值传递 和 地址传递(引用)

1---a=1,b=4,c=6

2---a=9,b=16,c=6

3---a=36,b=16,c=19