Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2363496
  • 博文数量: 298
  • 博客积分: 7876
  • 博客等级: 准将
  • 技术积分: 5500
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-23 13:39
文章存档

2013年(2)

2012年(142)

2011年(154)

分类: C/C++

2011-04-27 12:49:00

swap函数分析函数参数

 

1.      函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递

 

(1)值传递:

void func1(int x)

{

         x = x + 10;

}

 

(2)指针传递:

void func2 (int  *x)

{

         *x  = *x  + 10;

}

 

(3)引用传递:

void func2(int  &x )

{

         x = x + 10;

}

 

2.      swap函数

 

一般实现方法:

void swap(void *pa, void *pb)

{

         void c;

         c =  *pa;

         *pa = *pb;

         *pb = c;

}

 

示例程序1

(1)        #include

(2)         

(3)        void swap(int *a, int *b)

(4)        {

(5)           int c;

(6)           c = *a;

(7)           *a = *b;

(8)           *b = c;

(9)        }

(10)     void swap1(int a, int b)

(11)     {

(12)        int c;

(13)        c = a;

(14)        a = b;

(15)        b = c;

(16)     }

(17)     void swap2(int &a, int &b)

(18)     {

(19)        int c;

(20)        c = a;

(21)        a = b;

(22)        b = c;

(23)     }

(24)      

(25)     int main(void)

(26)     {

(27)        int a = 3;

(28)        int b = 4;

(29)        printf("before swap:a = %d, b = %d\n",a,b);

(30)        swap1(a, b);

(31)        printf("after swap:a = %d, b = %d\n",a,b);

(32)       

(33)        printf("before swap:a = %d, b = %d\n",a,b);

(34)        swap2(a, b);

(35)        printf("after swap:a = %d, b = %d\n",a,b);

(36)       

(37)       

(38)        printf("before swap:a = %d, b = %d\n",a,b);

(39)        swap(&a, &b);

(40)        printf("after swap:a = %d, b = %d\n",a,b);

(41)        return 0;

(42)     }

程序结果:

before swap:a = 3, b = 4

after swap:a = 3, b = 4

before swap:a = 3, b = 4

after swap:a = 4, b = 3

before swap:a = 4, b = 3

after swap:a = 3, b = 4

请按任意键继续. . .

 

(1)        首先我们讨论swap1()函数,传入函数的参数是局部变量ab,进去函数后我们使用的ab参数的副本,因为编译器总是要为函数的每个函数的每个参数制作临时副本,变量a的副本是_a,编译器使_a = a,如果函数体里面程序修改了_a的值,不会使a的值发生改变,如下代码:

void swap1(int a, int b)

{

     int c;

     c = a;

     a = b;

     b = c;

}

使副本_a,_b交换了值,但是a,b变量的值没有发生变化。

(2)        我们开始讨论swap()函数,传入函数的参数是变量a,b的地址pa,pb,然后编译器为其函数的参数准备副本_pa,_pb,并且使_pa = pa, _pb = pb,如果函数内的程序改变了_pa的值,那么pa的值不会改变,如果函数内的程序改变了地址_pa的内容,那么相应的地址pa的内容也会改变,因为他们都在指向同一个位置。

(3)        如果是C++程序我们还可以使用引用,实现代码如下:

void swap2(int &a, int &b)

{

     int c;

     c = a;

     a = b;

     b = c;

}

swap2()函数传入的是ab的别名,相应的改变函数内的ab值,其参数也会发生变化。

阅读(1842) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~