指针的用处

举报
吴梦青 发表于 2022/06/03 21:28:51 2022/06/03
【摘要】 指针应用场景一交换两个变量的值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"...

指针应用场景一

  • 交换两个变量的值
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语言里非常常用的工具,使用指针可以让我们更方便地处理函数,使用指针的时候也要小心不要乱赋值。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。