c语言程序设计进阶笔记(浙大翁恺mooc)

本文深入探讨C语言中指针的应用场景,包括变量值交换、minmax函数实现及动态内存分配等,并解析常见指针错误及其运算规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 指针的使用

这一章的内容与指针详解的内容有重复,系统了解指针去看:

(2条消息) c指针详细笔记_zlshhdgrbk的博客-CSDN博客

1.1.1 指针的使用

——指针使用场景一: 交换两个变量的值:

int main() {
    int a = 5;
    int b = 6;
    return 0;
}


void swap(int *pa, int *pb) {
    int t = *pa;
    *pa = *pb;
    *pb = t;
}

 此时传进去的参数是需要保存且带回结果的变量

——指针应用场景二:minmax函数:

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

int main() {
    int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,22,55,};
    int min, max;
    minmax(a, sizeof(a)/sizeof(a[0]), &min, &max);
    printf("min = %d,max = %d\n", 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];
        }
    }

这种情况函数的返回值不只一个

——指针应用场景三:状态通过return返回(也就是运算有可能出错),结果通过指针返回

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

——指针常见的错误:

只定义了指针变量,还没有指向任何变量就开始使用指针,如直接赋值*p=12,这样程序容易崩溃

1.2 指针运算

1.2.1 指针运算

  • 指针可以+-,可以比大小,不能×,因为没有意义
  • 不管指针指向的是什么类型,指针的大小都不变,都占4个字节
  • void* 是不知道指针会指向什么类型,具体指向什么不清楚,往往用在底层程序

1.2.2 动态内存分配

C99可以用变量定义数组的大小,在这之前用动态内存的方法

动态内存分配函数:void* malloc (size_t size);     使用前要加头文件#include <stdlib.h>

a = (int*)malloc(number*sizeof(int)); //里面的参数要的是具体字节数

注意malloc返回的结果是void*,所以要做一步类型转换(int*)

之后a就能当作数组来用

注意这块空间a用完后需要手动释放  函数为free(a);

如果申请失败了会返回一个0,或者是NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值