C语言宏运算

来源:百度知道 编辑:UC知道 时间:2024/05/20 04:45:06
#include<stdio.h>
int func(int a,int*p);
void main()
{
int a=1,b=2,c=0;
c=fun(a,&b);
b=fun(c,&a);
a=fun(b,&c);
printf("a=%d","b=%d","c=%d",a,b,c);
}
int fun(int a,int *p)
{
a++;
*p=a+1;
return(*p+a);
}
为什么a=29,b=13,c=15呢?

运行至c=fun(a,&b); 这一行后
a=1,b=3,c=5
因为在fun里,a++只是对这个函数内部的参数进行自加。所以a++不影响main里的a值。但因为b是以指针传入的,所以更改的是存放b的内存单元里的值,所以main中的b值变了。c是return来的。不难理解。

运行至b=fun(c,&a); 这一行后
a=7,b=13,c=5
这里c的值不变,a=(c+1); b=(c+1)+a;

运行至a=fun(b,&c); 这一行后
a=29,b=13,c=15

#include<stdio.h> 

int fun(int a1,int*p); 

void main() 

    int a=1,b=2,c=0; 
    
    c=fun(a,&b); //a=1,b=3,c=5
    b=fun(c,&a); //a=7,b=13,c=5
    a=fun(b,&c); //a=29,b=13,c=15

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


int fun(int a1,int *p) 
{
    //举例,如果 a1=1,*p=2 
    a1++;        &nb