weiliwei 发表于 2017-7-2 14:55:35

函数的值传递和引用传递

1 #include "stdafx.h"
2 #include <stdlib.h>
3
4 int Exchange(int*px,int *py)
5 {
6   int temp = *px;
7   *px = *py;
8   *py = temp;
9   printf("*px=%d,\n*py=%d\n",*px,*py);
10   return 0 ;
11 }
12 int _tmain(int argc, _TCHAR* argv[])
13 {
14   int a = 8;
15   int b = 46;
16   Exchange(&a,&b);
17   printf("a=%d,\nb=%d\n",a,b);
18   
19   system("pause");
20   return 0;
21 }
  或者也可以如下方式进行引用传递:



1 #include "stdafx.h"
2 #include <stdlib.h>
3
4 int Exchange(int&x,int &y)
5 {
6   int temp = x;
7   x = y;
8   y = temp;
9   printf("x=%d,\ny=%d\n",x,y);
10   return 0 ;
11 }
12 int _tmain(int argc, _TCHAR* argv[])
13 {
14   int a = 8;
15   int b = 46;
16   Exchange(a,b);
17   printf("a=%d,\nb=%d\n",a,b);
18   
19   system("pause");
20   return 0;
21 }
  下面代码就是值传递的例子:



1 #include "stdafx.h"
2 #include <stdlib.h>
3
4 int Exchange(intx,int y)
5 {
6   int temp = x;
7   x = y;
8   y = temp;
9   printf("x=%d,\ny=%d\n",x,y);
10   return 0 ;
11 }
12 int _tmain(int argc, _TCHAR* argv[])
13 {
14   int a = 8;
15   int b = 46;
16   Exchange(a,b);
17   printf("a=%d,\nb=%d\n",a,b);
18   
19   system("pause");
20   return 0;
21 }
  所以,与引用传递相对,值传递的代码格式只有一处是不同的,即在定义处:Exchange(int &x, int &y);在调用处都是一样的。
  值传递的函数里操作的不是a,b 变量本身,只是将a,b 值赋给了x,y 函数里操作
的只是x,y 变量而不是a,b,显示a,b 的值不会被Exchange 函数所修改。
      引用传递Exchange(a,b)函数里是用a,b 分别代替了x,y。函数里操作的就是a,b
变量的本身,因此a,b 的值可在函数里被修改的。
  指针的指针:





1 //查找一个字符在字符串中的位置
2
3 #include "stdafx.h"
4 #include<stdlib.h>
5 #include<string.h>
6
7 void find(char array[],char search,char **ppa)
8 {
9   int i;
10   for(i = 0; *(array+1) != '\0'; i++)
11   {
12         if(*(array+i) == search)
13         {
14             *ppa = array + i;
15               break;
16         }
17         else if(*(array+i)==0)
18         {
19             *ppa=0;
20             break;
21         }
22   }
23 }
24 int _tmain(int argc, _TCHAR* argv[])
25 {
26   char str[]={"afsdfsdfdf"}; /*待查找的字符串*/
27   char a ='d';
28   char *p = 0;0;//如果查找到后指针p 将指向字符串中查找到的第一个字符的地址
29
30   find(str,a,&p);
31   if(0 == p)
32   {
33         printf("没找到该字母!\n");
34   }
35   else
36   {
37         printf("找到了,p=%d\n",p);
38   }
39   system("pause");
40   return 0;
41 }
View Code
页: [1]
查看完整版本: 函数的值传递和引用传递