C语言中二级指针的应用小结

 更新时间:2024年11月26日 10:15:56   作者:电脑玩家饮水机  
二级指针是C语言中指向指针的指针,常用于在函数中修改指针的地址,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. 二级指针概念介绍

在介绍二级指针之前,首先介绍指针这个概念,在C语言中指针是用来指向其他数据类型的一种数据类型,比如char, int, double等类型,那么二级指针的概念就是指向指针的指针。

2. 二级指针应用场景

那么我们为什么要使用二级指针呢,这就牵扯到C语言最基本的两种参数传递方式,值传递和地址传递,顾名思义,值传递是指我们将参数本身传入函数,而地址传递则是将参数的地址传入函数,而他们造成的效果是值传递无法改变参数实际值,而地址传递则可以改变参数实际值。

那如果是想在函数中修改参数的地址又该怎么办呢,我们如果直接将地址传入函数,效果和值传递的方式一致,函数的地址不会发生改变,因此我们需要将地址的地址传入函数后即可成功改变地址值,那么我们就需要指针的指针,也就是二级指针,下面将举例来说明二级指针的应用。

3.二级指针应用实例

我们这里写一个函数来实现给指针分配固定大小内存。先看下面这段代码。

错误代码示范:

/*动态分配内存,每个单元占用num个字节*/
bool apply_memory(int *ptr, unsinged int num)
{
    ptr = (int *)malloc(num * sizeof(char));
    if(NULL == ptr)
    {
        return FALSE;
    }
    return TRUE;
}

/*测试函数*/
bool test_code(void)
{   
    int *ptr = NULL;
    bool ret = apply_memory(ptr, 10);
    if(TRUE == ret)
    {
        return TRUE;
    }
    return FALSE;
}

这段代码的本意是给传入函数的指针动态分配内存,每个元素占用10个字节大小,但是这里犯了值传递的错误,导致指针ptr未被修改,因此想要修改ptr,应该传入ptr的地址,正确用例如下。

/*动态分配内存,每个单元占用num个字节*/
bool apply_memory(int **ptr, unsinged int num)
{
    *ptr = (int *)malloc(num * sizeof(char));
    if(NULL == *ptr)
    {
        return FALSE;
    }
    return TRUE;
}

/*测试函数*/
bool test_code(void)
{   
    int *ptr = NULL;
    bool ret = apply_memory(&ptr, 10);
    if(TRUE == ret)
    {
        return TRUE;
    }
    return FALSE;
}

4.二级指针总结

实际上二级指针的作用就是为了在函数当中修改一级指针指向的地址,同理,三级指针的作用也是在函数当中修改二级指针指向的地址。依次类推,如果在函数当中想修改某个参数(变量或者地址),就必须传入参数的地址才能够实现。

到此这篇关于C语言中二级指针的应用小结的文章就介绍到这了,更多相关C语言 二级指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言中结构体、联合体的成员内存对齐情况

    C语言中结构体、联合体的成员内存对齐情况

    这篇文章主要给大家介绍了关于C语言中结构体、联合体的成员内存对齐情况的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • C语言中for循环问题(一个小坑需注意)

    C语言中for循环问题(一个小坑需注意)

    这篇文章主要给大家介绍了关于C语言中for循环问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • C++中pair的用法总结

    C++中pair的用法总结

    pair是C++STL(标准模板库)中的一个现有容器,它将2个数据整合成一组数据,当我们类似需求的时候就可以使用到pair,pair的本质其实就是个结构体,本文将详细的给大家介绍pair用法,感兴趣的同学可以参考阅读
    2023-05-05
  • C++解决输出链表中倒数k个结点的问题

    C++解决输出链表中倒数k个结点的问题

    这篇文章主要给大家介绍了关于如何利用C++解决输出链表中倒数k个结点的问题,文中通过实例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友可以参考下
    2021-12-12
  • C++使用智能指针实现模板形式的单例类

    C++使用智能指针实现模板形式的单例类

    这篇文章主要为大家详细介绍了C++使用了智能指针实现模板形式的单例类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • c语言实现两个单链表的交叉合并方式

    c语言实现两个单链表的交叉合并方式

    今天小编就为大家分享一篇c语言实现两个单链表的交叉合并方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • kernel劫持modprobe path内容详解

    kernel劫持modprobe path内容详解

    这篇文章主要为大家介绍了kernel劫持modprobe path的内容详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • C语言数据结构中定位函数Index的使用方法

    C语言数据结构中定位函数Index的使用方法

    这篇文章主要介绍了C语言数据结构中定位函数Index的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • C语言的堆串操作详解

    C语言的堆串操作详解

    大家好,本篇文章主要讲的是C语言的堆串操作详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • C++初阶学习之模板进阶

    C++初阶学习之模板进阶

    这篇文章主要为大家介绍了C++模板进阶,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01

最新评论