zoukankan      html  css  js  c++  java
  • 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语言进阶

  • 相关阅读:
    flex 连接mysql
    正确配置调试world wind on vs2008
    FLex调用servlet连接数据库
    c# 连接mysql并webservice数据
    ADF连接SOM
    转载加收藏关于OPENGL配置VS2008
    flex不能显示本地发布的地图
    Symbian专区
    asp.net控件开发基础學習
    控制网页大小
  • 原文地址:https://www.cnblogs.com/halflife/p/15627938.html
Copyright © 2011-2022 走看看