[c++] 二级指针的原理
示例
- 将值(实参)传递给值(形参),无法更改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++] 二级指针的原理的更多相关文章
- OpenCV二维Mat数组(二级指针)在CUDA中的使用
CUDA用于并行计算非常方便,但是GPU与CPU之间的交互,比如传递参数等相对麻烦一些.在写CUDA核函数的时候形参往往会有很多个,动辄达到10-20个,如果能够在CPU中提前把数据组织好,比如使用二 ...
- C 真正理解二级指针
本文转载自CSDN博主liaoxinmeng,做数据结构时遇到指针方面的问题,想了许久,因此我觉得很有必要复习一下二级指针及其使用 正文如下: 指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也 ...
- 对线程等待函数pthread_join二级指针参数分析
分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...
- 【C】二级指针探秘 & 星号的两种用法(1.与基本类型结合形成另一种类型,比如与int结合形成int* 2.取值操作)
1)问题:二级指针到底是什么?怎么用的?怎么存放的? #include <stdio.h> #define TEST_ADDR 0x12FF40 void main() { int a = ...
- C语言一级指针与二级指针
指针的概念 指针就是地址, 利用这个地址可以找到指定的数据 指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针 指针变量就是存储地址的变量 int *p1;// 申请了一个变量, 即在 ...
- C++二级指针第二种内存模型(二维数组)
C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4 ...
- C语言 二级指针内存模型混合实战
//二级指针内存模型混合实战 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #i ...
- C语言 二级指针内存模型③
//二级指针内存模型③ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #incl ...
- C语言 二级指针内存模型②
//二级指针第二种内存模型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #incl ...
随机推荐
- Flutter原理简介
Flutter 是怎么运转的? 与用于构建移动应用程序的其他大多数框架不同,Flutter 是重写了一整套包括底层渲染逻辑和上层开发语言的完整解决方案.这样不仅可以保证视图渲染在 Android 和 ...
- Vue组件(35)动态组件 component 的 is 到底可以是啥?
component 动态组件 Vue官网上提供了一个动态组件 <component :is="currentTabComponent"> ,那么这里的 is 到底是什么 ...
- [Fundamental of Power Electronics]-PART I-5.不连续导电模式-5.1 DCM来源和模式边界
引子: 当使用电流单向和/或电压单向半导体开关实现DC-DC变换器的理想开关时,可能会出现一种或多种被称为不连续导电模式(DCM)的新工作模式.当电感电流或电容电压的纹波大到足以导致所施加的开关电流或 ...
- thinkphp添加excel更新数据表数据(优化篇)
由于主管说使用saveAll更新数据效率太低,要改用sql语句一次执行现在修改 /** * excel开启上传 * author: panzhide * @return array * Date: 2 ...
- docker命令快速入门
docker快速入门系列 Docker hello world hello world $ docker run ubuntu:15.10 /bin/echo "Hello world&qu ...
- Spring Cloud Alibaba(2)---RestTemplate微服务项目
RestTemplate微服务项目 前言 因为要运用 Spring Cloud Alibaba 开源组件到分布式项目中,所以这里先搭建一个不通过 Spring Cloud只通过 RestTemplat ...
- Mysql之Mycat读写分离及分库分表
## 什么是mycat ```basic 1.一个彻底开源的,面向企业应用开发的大数据库集群 2.支持事务.ACID.可以替代MySQL的加强版数据库 3.一个可以视为MySQL集群的企业级数据库,用 ...
- 一次错误使用 go-cache 导致出现的线上问题
话说一个美滋滋的上午, 突然就出现大量报警, 接口大量请求都响应超时了. 排查过程 查看服务器的监控系统, CPU, 内存, 负载等指标正常 排查日志, 日志能够响应的结果也正常. request.l ...
- JVM小册(1)------jstat和Parallel GC日志
JVM小册(1)------jstat和Parallel GC日志 一. 背景 在生产环境中,有时候会遇到OOM的情况,抛开Arthas 等比较成熟的工具以外,我们可以使用java 提供的jatat和 ...
- B - 真·签到题 FZU - 2214(背包)
Given a set of n items, each with a weight w[i] and a value v[i], determine a way to choose the item ...