形参与实参的传递是怎么回事啊?请大虾们帮帮忙,用下面的二道题详细讲解一下,谢谢啦!

//NO.1
#include <stdio.h>
void swap1(int*a, int*b)
{
int*t;
t=a; a=b; b=t;
}
main()
{
int i=3, j=5, *p=&i, *q=&j;
swap1(p,q); printf("%d,%d\n",*p,*q);
}
//NO.2
# include<stdio.h>
void swap2(int x, int y)
{
int temp;
temp=x; x=y; y=temp;
}
void main()
{
int i=3, int j=5;
swap2(i,j)
}
//NO.3
# include<stdio.h>
void swap3(int *p1, int *p2)
{
int temp;
temp=*p1; *p1=*p2; *p2=*temp;
}
void main()
{
int a,b,*ptr1,*ptr2;
a=1, b=2, ptr1=&a, prt2=&b;
swap3(ptr1,ptr2);
print("a=%d,b=%d",a,b);
}

NO.1中swap函数的参数叫做形参,main函数传递给它的p和q为实参,swap函数要求的是两个整数指针,即整数的地址,当main函数将i,j的地址传递给swap函数后,swap函数将对这两个整数进行操作,将两者互换。
NO.2中swap函数要求的是两个整数,main函数将两个整数传给他 ,形参的值等于了实参的值,但swap函数操作的是形参并非实参,所以swap函数只是将形参互换,并未对实参进行操作。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-22
函数定义中的参数称为形参,函数在被调用时代入的参数称为实参
如void swap1(int*a, int*b)函数定义中的a,b为形参
int i=3, j=5, *p=&i, *q=&j;
swap1(p,q); printf("%d,%d\n",*p,*q);
swap1(p,q)中的参数为实参
no1中swap1()函数中的参数是指针类型,调用时传递的是指针
no2中swap2()函数中的参数是int类型,传递的是值,在函数内部计算后参数的变化不能传回原变量了
no3中swap3()函数中的参数也是指针类型,但和no1中的区别请仔细看函数内部的变量传递
以上3个例子在调试器中跟踪调试一下就明白了本回答被提问者采纳
第2个回答  2011-03-22
形参是地址,地址里的内容只有一份。
实参是数据,只是一份拷贝,函数里修改的是不会影响外面的
第3个回答  2011-03-22
形参是一个形式 实参是它真正的变量
相似回答