C/C++ 指针传递的作用

这篇具有很好参考价值的文章主要介绍了C/C++ 指针传递的作用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

void pointerTest(int num) {
    num = 20;
}

int main() {
    int num = 10;
    pointerTest(num);
    LOGI("%d", num) // 打印出来的结果是 10

    return 0;
}

在这个例子中,main 函数定义了整型 num,值为 10,然后以参数传递给 pointerTest 函数,在 pointerTest 函数中,直接对传进来的 num 赋值为 20。最终,打印出来的结果还是 10。 

为啥呢?熟悉 java 的人很快会反应过来,因为 int 是基本数据类型,要用引用数据类型。

    public static void pointerTest(String str) {
        str = "wk";
    }

    public static void main(String[] args) {
        String str = "test";
        pointerTest(str);
        System.out.println(str); // 打印出来的结果是 test
    }

 String 是引用数据类型了吧,但是打印出来的结果仍没被改变

 其实对于引用数据类型参数而言,只能对这个对象进行相应的操作(get/set),并不能直接替换整个对象


C/C++ 中得意于指针能够修改函数外的变量值

void pointerTest(int *num) {
    *num = 20;
}

int main() {
    int num = 10;
    pointerTest(&num);
    LOGI("%d", num) // 打印出来的结果是 20

    return 0;
}

 字符串也是一样的:(C中的字符串类型为 char*

void pointerTest(char **str) {
    *str = "wk";
}

int main() {
    char *str = "test";
    pointerTest(&str);
    LOGI("%s", str) // 打印出来的结果是 wk

    return 0;
}

 在 pointerTest 函数中,对传进来的指针进行取值(*)对外部参数进行修改。按照这个思路反推,那么我们在传递内存地址给函数 其实是 提供函数修改参数的能力


所以,不管是二级指针还是三级指针,传递内存地址给函数的目的都可以这样子去理解文章来源地址https://www.toymoban.com/news/detail-409243.html

到了这里,关于C/C++ 指针传递的作用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 逆向-beginners之传递指针参数

    #include stdio.h int f(int *a, int *b, int *c) {     return *a * *b + *c; } int main() {     int a = 1, b = 2, c = 3;     printf(\\\"%dn\\\", f(a, b, c));    // 5     return 0; } #if 0 note : 传递地址到函数的基本上都是指针 #endif #if 0 /*  * intel  */ 0000000000001169 f:     1169:    f3 0f 1e fa              endbr64   

    2024年02月07日
    浏览(37)
  • 配置 mybatis 打印出执行的 sql 及返回的结果集

    在开发过程中, 经常会遇到想要看到应用所执行的 sql 这样的需求. 比如你写了一个查询的功能, 但查询出来的结果与你预期的不符合, 你想搞清楚到底哪里出了问题, 你自然需要看看所执行的 sql 语句, 必要的话甚至还要亲自拷贝到数据库里去查查. 自然, 这就要求应用要能把执

    2024年02月07日
    浏览(44)
  • 关于指针与引用传递的效率问题

    引用是C++的特性,指针是C语言的特性 关于这两种特性的运行效率,人云亦云,好多人都说引用传递效率更高 以至于一些面试官在自己都不清楚的前提下面试别人 笔者有幸遇到过,由于看过底层汇编,在面试官对我说引用效率更高的时候,导致我一度怀疑自己的记忆力 下面

    2024年02月10日
    浏览(39)
  • selenium自动化:定位到的元素本身有值,但是打印出来的文本值为空。【已解决】

    问题描述: 部分代码段如下:  元素定位是存在文本的【4174】 结果运行代码 输出为空 解决方法: 1. 判断元素是否被隐藏  print ( driver.find_element(xxxx).is_displayed() ) 若返回值为False或者空白,那就说明原因被隐藏了 2. 用get_attribute()方法获取 driver.find_element(xxxx).get_attribute(“

    2024年02月13日
    浏览(59)
  • MyBatis拦截器-打印出真正执行的sql语句和执行结果

    目录 广而告之 背景 先看成品 实现步骤 第一步,实现Interceptor接口 ​编辑 第二步,给拦截器指定要拦截的方法签名 第三步,实现拦截器的intercept方法。 第四步,在mybatis-config.xml里配置上这个拦截器插件 第五步,禁用mybatis打印日志 给大家推荐一个好用的在线工具网站: 常

    2023年04月25日
    浏览(66)
  • C++入门【24-C++ 传递指针给函数】

    C++ 允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。 下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值: 实例 当上面的代码被编译和执行时,它会产生下列结果: Number of seconds :1294450468 能接受指针作为参数的函数,也能

    2024年01月25日
    浏览(35)
  • 聊聊Maven的依赖传递、依赖管理、依赖作用域

    在Maven中,依赖是会传递的,假如在业务项目中引入了 spring-boot-starter-web 依赖: 那么业务项目不仅直接引入了 spring-boot-starter-web 依赖,还间接引入了 spring-boot-starter-web 的依赖项: spring-boot-starter 、 spring-boot-starter-json 、 spring-boot-starter-tomcat 、 spring-web 、 spring-webmvc 。 Maven依

    2024年02月08日
    浏览(38)
  • 小程序页面传递布尔值不起作用的解决方法

    传参: 以下方式使用时不起作用或出现问题: 这种方式传参后isprincipal的值已为字符串‘true’。 需改成如下形式:

    2024年02月14日
    浏览(41)
  • C语言:使用指针打印数组内容

    写一个 函数 打印arr数组的内容 ,不使用数组下标, 使用指针 。 arr 是 一维数组 。                       =========================================================================                         (一). 定义 一维数组arr : float arr[] = { 3.14f, 99.9f, 66.5f, 0.0f };          定义 指

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包