【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入的参数要求 | 参数作返回值 )

2023-03-27 18:06:08 浏览数 (1)

文章目录

代码语言:txt复制
        - [I . 博客总结 . 指针与引用类型参数](https://cloud.tencent.com/developer)
        - [II . 指针作为参数和返回值](https://cloud.tencent.com/developer)
        - [III . 引用参数简介](https://cloud.tencent.com/developer)
        - [IV . 引用作为参数和返回值](https://cloud.tencent.com/developer)
I . 博客总结 . 指针与引用类型参数

1 . 讨论问题 : 本章只针对一点进行讨论 , 那就是对两种类型的参数修改 , 是否影响到外部的变量 ; 传入什么样的参数才能修改外部变量 , 即 参数当返回值使用 ;

2 . 如果要在函数中修改 N 维指针指向 :

① 使用指针作为参数 : 必须传入 N 1 维 ( 及以上 ) 指针参数 , 才可以修改 N 维指针的指向 ;

② 使用引用作为参数 : 可以传入 N 维指针的引用作为参数 , 就可以修改 N 维指针的指向 ;

3 . 参数使用语言环境 : 引用类型参数只能在 C 环境中使用 , 指针类型参数可以用于 C / C 两种语言环境中 , 因此很多基础库 如 FFMPEG , OpenSL ES 等使用的都是指针类型参数 ;

II . 指针作为参数和返回值

指针作为参数和返回值 : 如果是指针作为参数 , 修改 N 维指针指向的地址 , 那么需要传入 N 1 维指针 , 传入指向该 N 维指针 的指针参数 ( N 1 维指针 ) , 才能在函数中修改该 N 维指针的指向 ;

① 一维指针参数 : 传入一维指针 , 只能修改指向的内存的内容 ; 修改一维指针本身指向无意义 ;

② 二维指针参数 : 传入 二维指针 , 只能修改一维指针 及 以下的内容 ; 修改二维指针本身指向无意义 ;

③ N 维指针参数 : 传入 N 维指针 , 只能修改 N - 1 维指针 及 以下的内容 , 修改 N 维指针内容 无意义 ;

更多内容参考 【Android FFMPEG 开发】FFMPEG 方法中指针类型参数说明 ( 一维指针类型参数 | 二维指针类型参数 )

III . 引用参数简介

1 . C 语言中的参数 分类 :

① 普通变量参数 : C 语言中 普通变量 ( 非指针变量 ) 作为参数 , 只能进行值传递 , 不能通过参数返回结果 ;

② 指针变量参数 : C 语言中 , 如果要让函数的参数可以将结果返回 , 则必须使用指针作为参数 ;

2 . C 中的引用参数 : C 在 C 语言基础上扩展了 引用 数据类型 , 使用引用可以替代上面的指针作为参数的情况 , 使参数具有返回结果的能力 ;

3 . 作用及意义 :

① 具有返回值能力 : 使用引用作参数 , 可以将参数当做返回值使用 ;

② 提高参数传递效率 : 大型对象作参数时 , 使用引用类型 , 可以提高参数传递效率 ;

更多关于引用的内容参考 【C 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )

IV . 引用作为参数和返回值

引用作为参数和返回值 : 如果是引用作为参数 , 修改 N 维指针指向的地址 , 那么需要传入 N 维指针的引用即可 ,在函数中修改该引用 , 即可修改外部的被引用的变量 ;

① 一维指针引用参数 : 传入一维指针引用 , 可以完全修改该指针本身的指向 ;

② 二维指针引用参数 : 传入 二维指针 , 可以修改二维指针本身 及 以下的内容 ;

③ N 维指针引用参数 : 传入 N 维指针 , 可以修改 N 维指针本身 及 以下的内容 ;

0 人点赞