示例

  • 将值(实参)传递给值(形参),无法更改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. 力扣 - 剑指 Offer 37. 序列化二叉树

    目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...

  2. for what? while 与 until 差在哪?-- Shell十三问<第十三问>

    for what? while 与 until 差在哪?-- Shell十三问<第十三问> 最后要介绍的是 shell script 设计中常见的"循环"(loop). ...

  3. 生产中常用的du命令

    1. 介绍 du是用来查看文件或目录所占用磁盘空间的大小 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exc ...

  4. Spring Cloud Alibaba(1)---入门篇

    Spring Cloud Alibaba入门篇 有关微服务的一些概念的东西我这里就不再阐述了,因为之前在写Spring Cloud系列的时候都有详细写过. 具体地址: Spring Cloud系列博客 ...

  5. [深搜]A. 【例题1】拔河比赛

    A . [ 例 题 1 ] 拔 河 比 赛 A. [例题1]拔河比赛 A.[例题1]拔河比赛 解析 模板题,选与不选 Code #include <bits/stdc++.h> #defi ...

  6. python基础(二):数据类型

    数据类型 学习Python时,一定要注意Python中数据类型和数据结构的学习,这对于你是否能够学好Python其中很重要的作用. 什么是数据类型? 人类有思想,很容易区分汉字和数字的区别,例如,你知 ...

  7. Dynamics CRM安装教程八:Claims-based认证-外部访问配置(IFD配置)

    内部访问配置完成后就剩下最关键的最后一步了,就是外部访问配置,这个配置好以后就可以让非域用户的计算机访问到我们的CRM系统了.言归正传开始进行配置打开CRM服务器的Dynamic CRM部署管理,选择 ...

  8. Java刷题-tree

    一.分别按照二叉树先序,中序和后序打印所有的节点. 这道题就是书上的算法思想的实际使用,唯一需要特别注意到的是用递归的方式建树,还是比较巧妙的,因为一棵树的建立过程字符流是重复使用的,用递归的方式对根 ...

  9. MySQL8开启ssl加密

    1 概述 MySQL从5.7开始默认开启SSL加密功能,进入MySQL控制台后输入status可以查看ssl的状态,出现下图表示在使用ssl: 另外,ssl加密需要密钥与证书,可以使用openssl手 ...

  10. Queue API的几种实现详解

    目录 Queue API的几种方法的使用 ArrayBlockingQueue原理及源码解析 ArrayBlockingQueue的成员变量 ArrayBlockingQueue的offer和put方 ...