第5天:指针的用处

241 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

指针应用场景一

  • 交换两个变量的值
void swap(int *pa,int *pb)
{
    int t=*pa;
    *pa=*pb;
    *pb=t;
}
#include<studio.h>
void swap(int *pa,int *pb);
int main(void)
{
    int a=5;
    int b=6;
    swap(&a,&b);
    printf("%d%d",a,b);
    
    return 0;
}
void swap(int *pa,int *pb)
{
    int t=*pa;
    *pa=*pb;
    *pb=t;
}

指针应用场景二

  • 函数返回多个值,某些值就只能通过指针返回
  • 传入的参数实际上是需要保存带回的结果的变量
#include<studio.h>
int main(void)
{
    int a[]={1,2,3,4,5,6,7,8,9};
    int min,max;
    minmax(a,sizeof(a)/sizeof(a[0]),&min,&max);
    printf("%d%d",min,max);
    return 0;
}
void minmax(int a[],int len,int *min,int *max)
{
    int i;
    *min=*max=a[0];
    for(i=1;i<len;i++){
        if(a[i]<*min){
            *min=a[i];
        }
        if(a[i]>max){
        *max=a[i];
        }
    }
}

函数的参数:a[],一个数组;len,数组的长度;min,max,数组的最大值和最小值。 在minmax这个函数里比较出最大值和最小值,然后通过传出来输出。

指针应用场景二b

函数返回运算的状态,结果通过指针返回。

  • 常用的套路是让函数返回特殊的不属于有效范围内的值来表示出错:
    • -1或0(在文件操作会看到大量的例子)
    • 但是当任何数值都是有效的可能结果时,就得分开返回了
      • 状态用return返回,,实际值用指针参数返回
        • 原因:可以把函数的返回结果放入if语句里
      • 这种类型的程序是因为程序可能会出错,错误需要通过另外的途径表达出来
      • 后续的语言(C++,Java)采用了异常机制来解决这个问题

两个整数做除法的函数

#include<studio.h>
int main(void)
void main
{
    int a=5;
    int b=2;
    int c;
    if (divide(a,b,&c)){
        printf("%d/%d=%d",a,b,c);
    }
    return 0;
}
int divide(int a,int b,int *result)
{
    int ret=1;
    if(b==0) ret=0;
    else{
        *result=a/b;
    }
    return ret;
}

除法成功,返回1,否则返回0;

指针最常见的错误

  • 定义了指针变量,还没有指向任何变量,就开始使用指针
  • 这样会修改指针指向的地址,造成程序的崩溃。 总结:指针是C语言里非常常用的工具,使用指针可以让我们更方便地处理函数,使用指针的时候也要小心不要乱赋值。