#includevoid Swap(int* pa, int* pb) // 这个函数定义语句里的int* pa和int* pb叫做形式参数(形参) // 形式参数当函数调用完成之后就自动销毁了,所以形式参数只在函数中有效。 // 所以形式参数的生命周期和局部参数的生命周期一样。 // 形式参数实际上是一份实际参数的临时拷贝。 // Swap这个咱创建的函数是不需要给main函数返回一个值的,只要把a,b的值互换就行 // 那么不需要返回一个值,那咱创建的函数类型就用viod的就行。 // 还有,这里一定要用指针变量,指针变量*pa,*pb可以直接读取a,b空间的地址 // 那么对指针变量*pa,*pb进行操作就是对a,b进行操作。而下面的操作就不行 // // void Swap2(intx,inty) // { // int z=0; // z=x; // x=y; // y=z; // } // 因为这里intx和inty是又重新创建了两个空间,然后把a,b的内容放到新建的空间里 // 但是因为x,y是另外的两个空间,它俩的空间地址与a,b的空间地址完全不同 // 所以对x,y进行操作是无法影响到a,b的空间内容的 // { int z = 0;//注意,这里的z一定要是变量 z = *pa;//因为这里的*pa或者*pb是在应用变量a,b。 *pa = *pb;//那么就可以完全把*pa或者*pb当作变量a,b。 *pb = z;//只有同一类型的(如都是变量)才可以相互赋值。 } //而变量与指针之间就不可以相互赋值。 int main() { int a = 10;//先给a创建了一个空间,然后空间里内容为10 int b = 20;//先给b创建了一个空间,然后空间里内容为20 printf("交换之前:a=%d,b=%dn", a, b); Swap(&a, &b); //这个调用函数叫传址调用,传递的是变量的地址。 //这个函数调用语句里的&a和&b叫做实际参数(实参)真实传递给了函数Swap两个参数。 //若是这个样子:Swap(a,b)。那这个调用函数叫传值调用,传递的是变量的值 //实参可以是:常量,变量,表达式,函数。无论是什么都要保证传递的是一个确定的值。 printf("交换之后:a=%d,b=%dn", a, b); return 0; }



