C语言学习笔记5

指针

        指针是C/C++等编程语言中的一个重要概念,它允许程序员直接操作内存地址。正确地使用指针可以极大地提高程序的效率和灵活性,但不当使用也可能导致程序错误甚至崩溃。简单来说,指针就像是我们上网卖东西填的地址,通过地址可以去到你家找到你。

 如何初始化指针

始终初始化你的指针,避免使用未初始化的指针。这可以防止程序因使用无效地址而导致的崩溃。

int *ptr = NULL; // 或 int *ptr = nullptr; 

检查分配内存是否成功

在使用malloc()calloc()realloc()new等函数分配内存后,检查返回的指针是否为NULLnullptr,以确保内存分配成功,否则就会报错。就像快递的地址没设置好,很容易找不到你家。

int *array = (int *)malloc(10 * sizeof(int));
if (array == NULL) {
    fprintf(stderr, "Memory allocation failed!\n");
    exit(EXIT_FAILURE);
}

这里的"array == NULL"就是判断指针是否设置好的。

避免野指针

野指针是指向不可访问内存区域的指针。确保释放内存之后不再使用该指针,并将其设置为NULLnullptr这是为了减少占用资源,就像旅店有户人退房了,店主会马上挂空房表示可以入住。

free(array); // 释放内存
array = NULL; // 设置为NULL

同时,当一个指针指向的内存被重新分配或释放时,该指针就变成了悬挂指针。确保在释放内存后及时更新指针。

例子

const int *const ptr = &var; // 指向常量的常量指针

在这行代码中,ptr 是一个指针变量,它指向一个整型变量 var。这里使用了两次 const 关键字,分别有不同的含义:

  1. 指向常量的指针 (const int *)

    • 这部分表示 ptr 指向的是一个常量整型数据。
    • 意味着通过 ptr 解引用访问的数据不能被修改。
    • 例如,你可以这样做:printf("%d\n", *ptr);,但是不能这样做:*ptr = 10;
  2. 常量指针 (int *const)

    • 这部分表示 ptr 自身是一个常量指针,也就是说 ptr 的值(即它所指向的地址)不能被改变。
    • 例如,你可以这样做:printf("%p\n", ptr);,但是不能这样做:ptr = &someOtherVar;

当我们把这两部分结合起来时,const int *const ptr = &var; 就表示:

  • ptr 是一个指针,它指向一个整型常量。
  • ptr 本身也是一个常量指针,其值(即指向的地址)不能被改变。

因此,ptr 既不允许改变它所指向的内容,也不允许改变自身指向的地址。这是一种非常严格的指针定义方式,主要用于保证某些数据的安全性,防止意外修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值