示例

  • 将值(实参)传递给值(形参),无法更改val

 1 #include <iostream>
2 using namespace std;
3
4 void change(int mem){
5 mem = 2;
6 }
7
8 int main(){
9 int val;
10 val = 1;
11 cout << val << endl;
12 change(val);
13 cout << val << endl;
14 return 0;
15 }

1

1

  • 将地址(实参)传递给指针(形参),可以更改val

 1 #include <iostream>
2 using namespace std;
3
4 void change(int *mem){
5 *mem = 2;
6 }
7
8 int main(){
9 int val;
10 val = 1;
11 cout << val << endl;
12 change(&val);
13 cout << val << endl;
14 return 0;
15 }

1

2

  • 将值(实参)传递给引用(形参),可以更改val

 1 #include <iostream>
2 using namespace std;
3
4 void change(int &mem){
5 mem = 2;
6 }
7
8 int main(){
9 int val;
10 val = 1;
11 cout << val << endl;
12 change(val);
13 cout << val << endl;
14 return 0;
15 }

1

2

  • 将指针(实参)传递给指针(形参),无法更改str

 1 #include <iostream>
2 using namespace std;
3
4 void change(const char *pstr){
5 pstr = "banana";
6 }
7
8 int main(){
9 const char *str;
10 str = "apple";
11 cout << str << endl;
12 change(str);
13 cout << str << endl;
14 return 0;
15 }

apple

apple

  • 将指针的地址(实参)传递给二级指针(形参),可更改str

 1 #include <iostream>
2 using namespace std;
3
4 void change(const char **pstr){
5 *pstr = "banana";
6 }
7
8 int main(){
9 const char *str;
10 str = "apple";
11 cout << str << endl;
12 change(&str);
13 cout << str << endl;
14 return 0;
15 }

apple

bababa

总结

  • 可见,想通过函数改变函数外的变量,需要传址而不是传值
  • 为什么使用二级指针呢,因为实参和形参类型必须对应,想改变指针的值,就要传递指针的地址,即二级指针

参考

关于双重指针的用法

https://blog.csdn.net/wjy397/article/details/82794380

剑指offer 面试题18:删除链表节点

https://www.cnblogs.com/cxc1357/p/12027597.html

参数传递

https://www.cnblogs.com/cxc1357/p/11945728.html

[c++] 二级指针的原理的更多相关文章

  1. OpenCV二维Mat数组(二级指针)在CUDA中的使用

    CUDA用于并行计算非常方便,但是GPU与CPU之间的交互,比如传递参数等相对麻烦一些.在写CUDA核函数的时候形参往往会有很多个,动辄达到10-20个,如果能够在CPU中提前把数据组织好,比如使用二 ...

  2. C 真正理解二级指针

    本文转载自CSDN博主liaoxinmeng,做数据结构时遇到指针方面的问题,想了许久,因此我觉得很有必要复习一下二级指针及其使用 正文如下: 指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也 ...

  3. 对线程等待函数pthread_join二级指针参数分析

    分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...

  4. 【C】二级指针探秘 & 星号的两种用法(1.与基本类型结合形成另一种类型,比如与int结合形成int* 2.取值操作)

    1)问题:二级指针到底是什么?怎么用的?怎么存放的? #include <stdio.h> #define TEST_ADDR 0x12FF40 void main() { int a = ...

  5. C语言一级指针与二级指针

    指针的概念 指针就是地址, 利用这个地址可以找到指定的数据 指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针 指针变量就是存储地址的变量 int *p1;// 申请了一个变量, 即在 ...

  6. C++二级指针第二种内存模型(二维数组)

    C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4 ...

  7. C语言 二级指针内存模型混合实战

    //二级指针内存模型混合实战 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #i ...

  8. C语言 二级指针内存模型③

    //二级指针内存模型③ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #incl ...

  9. C语言 二级指针内存模型②

    //二级指针第二种内存模型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #incl ...

随机推荐

  1. 周爱民带你深入剖析JavaScript核心原理

    作为前端工程师必备技能,JavaScript 的重要性不言而喻.虽然易上手,但却有着诸多复杂微妙的机制,想要真正掌握绝非易事. 专栏面向JavaScript语言的实际应用者与深度爱好者,以讲述Java ...

  2. 记一次踩坑之路之Ubuntu未导入镜像前配置docke/docker-composer

    更新 apt 包索引与升级 sudo apt-get update sudo apt-get upgrade 安装 apt 依赖包,用于通过HTTPS来获取仓库: sudo apt-get insta ...

  3. Git版本控制之-创建配置本地git仓库

    查看全局配置:code .gitconfig [code 就代表的用vscode 打开gitconfig 文件,如果是 sublime 就是 subl ][如果打开失败说明环境变量没有配置] [只有配 ...

  4. Numpy 对于矩阵的操作持续更新

    >>> import numpy as np >>> a = np.random.randint(10,size=(5,5)) >>> a arr ...

  5. inline&register

    inline关键字: 内联只是一个请求,不代表编译器会响应:同时某些编译器会将一些函数优化成为内联函数. C++在类内定义的函数默认是内联函数,具体是否真变成内联函数还需看编译器本身. registe ...

  6. Ugly Numbers UVA - 136

    Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9 ...

  7. 开源Influxdb2高性能客户端

    前言 最近我在了解时序数据库Influxdb 2.x版本,体验一翻之后,感觉官方的出品的.net客户端还有很多优化的地方,于是闭关几天,不吃不喝,将老夫多年练就的高性能网络通讯与高性能Buffer操作 ...

  8. 你已经用上 5G 网络了吗?

    随着各大手机厂商陆续推出 5G 手机,智能手机全面迎来 5G 浪潮.可能有人会发问:如此推崇 5G,5G 能为我们带来什么,我们的生活又会因此而改变多大呢? 什么是 5G? 简单地说,5G 就是第五代 ...

  9. (7)MySQL进阶篇SQL优化(InnoDB锁-事务隔离级别 )

    1.概述 在我们在学习InnoDB锁知识点之前,我觉得有必要让大家了解它的背景知识,因为这样才能让我们更系统地学习好它.InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION ...

  10. IDEA的Debug技巧

    01_Debug简介和意义 什么是程序DeBug? Debug,是程序开发人员必会的一项调试程序的技能. 企业中程序开发和程序调试的比例为1:1.5,可以说如果你不会调试程序,你就没有办法从事编程工作 ...