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++红黑树应用之手搓set和map

    C++红黑树应用之手搓set和map

    这篇文章主要为大家详细介绍了如何使用红黑树封装set和map,且必须保证两种数据结构复用同一棵红黑树,且满足set和map的性质,set的value不可被改变,而map的value可以被改变,需要的可以参考一下
    2023-03-03
  • C++实现不能被继承的类实例分析

    C++实现不能被继承的类实例分析

    这篇文章主要介绍了C++实现不能被继承的类实例分析,对于C++初学者而言可以通过本文实例更好的理解类的原理及运用,需要的朋友可以参考下
    2014-08-08
  • C语言将数组中元素的数排序输出的相关问题解决

    C语言将数组中元素的数排序输出的相关问题解决

    这篇文章主要介绍了C语言将数组中元素的数排序输出的相关问题解决,文中的题目是将元素连接起来排成一个数并要求出这类结果中数最小的一个,需要的朋友可以参考下
    2016-03-03
  • VS2022连接sqlserver数据库教程

    VS2022连接sqlserver数据库教程

    本文主要介绍了VS2022连接sqlserver数据库教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C++实现哈夫曼树算法

    C++实现哈夫曼树算法

    这篇文章主要为大家详细介绍了C++实现哈夫曼树的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C语言植物大战数据结构堆排序图文示例

    C语言植物大战数据结构堆排序图文示例

    这篇文章主要为大家介绍了C语言植物大战数据结构堆排序的图文示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • C++中字符串全排列算法及next_permutation原理详解

    C++中字符串全排列算法及next_permutation原理详解

    这篇文章主要为大家详细介绍了C++中字符串全排列(递归法)和(迭代法)以及next_permutation底层原理,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-02-02
  • C++中Boost的智能指针shared_ptr

    C++中Boost的智能指针shared_ptr

    这篇文章介绍了C++中Boost的智能指针shared_ptr,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • c语言链表基本操作(带有创建链表 删除 打印 插入)

    c语言链表基本操作(带有创建链表 删除 打印 插入)

    这篇文章主要介绍了c语言链表基本操作,大家参考使用吧
    2013-12-12
  • Linux下g++编译与使用静态库和动态库的方法

    Linux下g++编译与使用静态库和动态库的方法

    下面小编就为大家带来一篇Linux下g++编译与使用静态库和动态库的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论