1. 指针有什么用?

1.1.1   指针应用之一,交换两个变量的值

比如:

 1 void swap(int *pa,int *pb)
 2 
 3 {
 4 
 5       int t=*pa;
 6 
 7       *pa=*pb;
 8 
 9       *pb=t;
10 
11 }
12 
13 int main(void)
14 
15 {
16 
17       int a=5,b=6;
18 
19       swap(&a,&b);
20 
21       printf(“%d%d\n”,a,b);
22 
23  
24 
25       return 0;
26 
27 }

指针用在函数返回多个值,传进去的参数实际上是需要保存带回来的结果变量。

 1 int main(void)
 2 
 3 {
 4 
 5       int a[]={1,2,3,4,5,6,7,8,9,12,13,14,15,23,24,56};
 6 
 7       int min,max;
 8 
 9       minmax(a,sizeof(a)/sizeof(a[0]),&min,&max);
10 
11       printf(“min=%d,max=%d\n”,min,max);
12 
13       return 0;
14 
15 }
16 
17 void minmax(int a[],int len,int *min,int *max)
18 
19 {
20 
21       int i;
22 
23       *min=*max=a[0];
24 
25       for(i=1;i<len;i++)
26 
27       {
28 
29            if(a[i]<*min)
30 
31            {
32 
33                  *min=a[i];
34 
35            }
36 
37            if(a[i]>*max)
38 
39            {
40 
41                  *max=a[i];
42 
43            }
44 
45       }
46 
47 }

2               指针应用场景二,函数返回运算状态,结果通过指针返回。常用的套路是让函数返回特殊的不属于有效范围内的值来表示出错。-1或0(在文件操作会看到大量的例子)。但是当任何数值都是有效的可能结果时,就得分开返回了。

例,两个整数做除法的函数。

 1 int divide(int a,int b,int *result)
 2 
 3 {
 4 
 5       int ret=1;
 6 
 7       if(b==0)
 8 
 9       {
10 
11            ret=0;
12 
13       }
14 
15       else
16 
17       {
18 
19            *result=a/b;
20 
21       }
22 
23       return ret;
24 
25 }
26 
27 int main(void)
28 
29 {
30 
31       int a=5;
32 
33       int b=2;
34 
35       int c;
36 
37       if(divide(a,b,&c)
38 
39       {
40 
41            printf(“%d/%d=%d\n”,a,b,c);
42 
43       }
44 
45  
46 
47       return 0;
48 
49 }

后续的语言(C++,Java)采用了异常机制来解决这个问题。

指针最常见的错误:定义了指针变量,还没有指向任何变量,就开始使用指针。

参考文献:

mooc,翁恺,c语言进阶

原文地址:https://www.cnblogs.com/halflife/p/15627938.html