指针的使用

指针的使用

指针应用场景一

  • 交换两个变量的值
void swap(int *pa,int *pb)
{
    int t = *pa;
    *pa = *pb;
    *pb = t;
}
#include<stdio.h>

int main(void)
{
    int a = 5;
    int b = 6;
    swap(&a,&b);
    printf("a=%d,b=%d\n", a,b);
    return 0;
}

void swap(int *pa, int *pb)
{
    int t = *pa;
    *pa = *pb;
    *pb = t;
}
a=6,b=5

应用场景二

  • 函数返回多个值,某些值只能通过指针返回
    • 传入的参数实际上是需要保存待会的结果的变量
#include<stdio.h>

void minmax(int a[], int len, int *max, int *min);

int mian(void)
{
    int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55,};
    int min,max;
    minmax(a, sizeof(a)/sizeof(a[0]), &min, &max);
    return 0;
}

void minmax(int a[], int len, int *min, *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];
        }
    }
}
min=1,max=55

指针应用场景二b

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

  • 常用的套路是让函数返回特殊的不属于有效范围内的值来表示出错

  • -1或0(在文件操作会看到大量的例子)

  • 但是当任何数值都是有效的可能结果时,就是分开返回了

#include<stdio.h>

/**
    @return 如果除法成功,返回1;否则返回0
*/
int divide(int a, int b, int *result);

int main(void)
{
    int a=5;
    int b=2;
    int c;
    if( divide(a,b,&c)){
        printf("%d/%d=%d", a, b, c);
    }
    return 0;
}

int divide(iint a, int b, int *result)
{
    int ret = 1;
    if ( b== 0) ret = 0;
    else{
        *result = a/b;
    }
    return 0;
}

指针最常见的错误

  • 定义了指针变量,还没有指向任何变量,就开始使用指针
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容