一重指针和二重指针
https://www.cnblogs.com/douzi2/p/4934139.html
今天从函数传参的角度来理解指针。如果想交换两个变量a,b的值,我们会这么做:
int temp;
temp = a;
a = b;
b = a;
如果要把以上功能封装成一个函数,最开始的反应是:
func(int a,int b)
{
int temp;
temp = a;
a = b;
b = a;
}
但是func(a,b);这个函数执行完之后,a和b的值并没有交换。变换的只是函数内部的临时变量。以上这种方式无法改为函数外部的变量——a和b。
那么在函数的内部如何改变外部的变量呢,答案是指针。
func(int* a,int* b)
{
int temp;
temp = *a;
*a = *b;
*b = *a;
}
func(&a,&b);
指针就有这个特权,当函数参数是一个一重指针的时候,那么传入的就应该是变量的地址。
那么在函数的内部就可以直接通过修改该地址中存放的值。这样就能修改到外部变量的值了。
现在进一步思考,如果函数内部不是修改变量的值,而是指针的值及变量地址的值,又会怎样呢?没错这回就得用到二重指针。
可能有人会问,修改指针的值是想干嘛?修改指针的值的另一种说法就是:将指针指向另一个变量,或者是为指针分配一个新的空间。
比如 int* p = a,如果需要将其封装成函数,就会造成在函数中修改指针值的情况。假设一个功能函数需要为指针分配一个新的空间:
func(int* a)
{
a = new int();
}
假设函数外部现在有个一个指针int* p,func(p);执行完了之后,指针p仍然没有分配到新的空间。
道理和第一个例子是一样的,变的只是函数内部临时变量指针a的值,p并没有改变。
要想改变P的值:
func(int** a)
{
(*a) = new int();
}
那么要传入的参数就是指针的地址值:&p 。func(&p);
这样函数内部就能修改外部指针的值。
总结:
函数内部修改外部变量的值,需要一重指针;
函数内部修改外部指针变量的值,需要二重指针;
- 学习SpringMVC——拦截器
- 学习SpringMVC——国际化+上传+下载
- 行业研究:大数据(一)
- 控制并发访问的三道屏障: WCF限流(Throttling)体系探秘[下篇]
- 如何通过VPC在本机搭建局域网
- 你常用的10个MySQL命令
- WCF技术剖析之三十一: WCF事务编程[下篇]
- WCF技术剖析之三十一:WCF事务编程[上篇]
- 学习SpringMVC——你们要的REST风格的CRUD来了
- 并发中的同步--WCF并发体系的同步机制实现
- WCF 技术剖析之三十三:你是否了解WCF事务框架体系内部的工作机制?[下篇]
- 学习SpringMVC——从HelloWorld开始
- 小程序年底重磅更新,小游戏上线,最强入口也来了!
- 学习SpringMVC——如何获取请求参数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法